[vlc-commits] atsc_a64: fix incorrect iconv handling

Francois Cartegnie git at videolan.org
Wed Feb 10 10:38:55 CET 2016


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Mon Feb  8 22:55:38 2016 +0100| [6f444b6e56660e08005fe0baaf99104a992e068b] | committer: Francois Cartegnie

atsc_a64: fix incorrect iconv handling

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6f444b6e56660e08005fe0baaf99104a992e068b
---

 modules/codec/atsc_a65.c |   16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/modules/codec/atsc_a65.c b/modules/codec/atsc_a65.c
index 081bd7f..91aa3e5 100644
--- a/modules/codec/atsc_a65.c
+++ b/modules/codec/atsc_a65.c
@@ -119,6 +119,9 @@ static bool convert_encoding_set( atsc_a65_handle_t *p_handle,
     size_t i_mergmin1 = *pi_mergmin1;
     bool b_ret = true;
 
+    if( i_src == 0 )
+        return NULL;
+
     /* First exclude reserved ranges */
     for( unsigned i=0; i<12; i+=2 )
     {
@@ -160,13 +163,14 @@ static bool convert_encoding_set( atsc_a65_handle_t *p_handle,
             {
                 const char *p_inbuf = psz16;
                 char *p_outbuf = &psz_realloc[i_mergmin1];
-                size_t i_inbuf = i_src * 2;
-                size_t i_outbuf = i_src * 4;
-                b_ret = ( VLC_ICONV_ERR != vlc_iconv( p_handle->iconv16, &p_inbuf, &i_inbuf,
-                                                                         &p_outbuf, &i_outbuf ) );
+                const size_t i_outbuf_size = i_src * 4;
+                size_t i_inbuf_remain = i_src * 2;
+                size_t i_outbuf_remain = i_outbuf_size;
+                b_ret = ( VLC_ICONV_ERR != vlc_iconv( p_handle->iconv16, &p_inbuf, &i_inbuf_remain,
+                                                                         &p_outbuf, &i_outbuf_remain ) );
                 psz_dest = psz_realloc;
-                i_mergmin1 += i_outbuf;
-                psz_dest[i_mergmin1] = 0;
+                i_mergmin1 += (i_outbuf_size - i_outbuf_remain);
+                psz_dest[i_mergmin1 - 1] = 0;
             }
             free( psz16 );
         }



More information about the vlc-commits mailing list