[vlc-devel] commit: Do not allocate arbitrary length on the stack ( Rafaël Carré )

git version control git at videolan.org
Mon Mar 24 00:00:38 CET 2008


vlc | branch: master | Rafaël Carré <funman at videolan.org> | Sun Mar 23 23:00:27 2008 +0000| [cd47dbd343a25b60f2f722ff47b3ff04c6913060]

Do not allocate arbitrary length on the stack

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

 modules/codec/subtitles/subsdec.c |   20 +++++++++++---------
 1 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/modules/codec/subtitles/subsdec.c b/modules/codec/subtitles/subsdec.c
index 0d5081d..a4acb80 100644
--- a/modules/codec/subtitles/subsdec.c
+++ b/modules/codec/subtitles/subsdec.c
@@ -572,11 +572,12 @@ static char *StripTags( char *psz_subtitle )
  */
 static char *CreateHtmlSubtitle( char *psz_subtitle )
 {
-    char    psz_tagStack[ ( strlen( psz_subtitle ) / 3 ) + 1 ];
+    char    psz_tag = malloc( ( strlen( psz_subtitle ) / 3 ) + 1 );
+    if( !psz_tag ) return NULL;
     size_t  i_buf_size     = strlen( psz_subtitle ) + 100;
     char   *psz_html_start = malloc( i_buf_size );
 
-    psz_tagStack[ 0 ] = '\0';
+    psz_tag[ 0 ] = '\0';
 
     if( psz_html_start != NULL )
     {
@@ -604,21 +605,21 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
                 else if( !strncasecmp( psz_subtitle, "<b>", 3 ) )
                 {
                     strcpy( psz_html, "<b>" );
-                    strcat( psz_tagStack, "b" );
+                    strcat( psz_tag, "b" );
                     psz_html += 3;
                     psz_subtitle += 3;
                 }
                 else if( !strncasecmp( psz_subtitle, "<i>", 3 ) )
                 {
                     strcpy( psz_html, "<i>" );
-                    strcat( psz_tagStack, "i" );
+                    strcat( psz_tag, "i" );
                     psz_html += 3;
                     psz_subtitle += 3;
                 }
                 else if( !strncasecmp( psz_subtitle, "<u>", 3 ) )
                 {
                     strcpy( psz_html, "<u>" );
-                    strcat( psz_tagStack, "u" );
+                    strcat( psz_tag, "u" );
                     psz_html += 3;
                     psz_subtitle += 3;
                 }
@@ -630,7 +631,7 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
                             "alpha=\"", NULL };
 
                     strcpy( psz_html, "<font " );
-                    strcat( psz_tagStack, "f" );
+                    strcat( psz_tag, "f" );
                     psz_html += 6;
                     psz_subtitle += 6;
 
@@ -668,12 +669,12 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
                 else if( !strncmp( psz_subtitle, "</", 2 ))
                 {
                     vlc_bool_t  b_match     = VLC_FALSE;
-                    int         i_len       = strlen( psz_tagStack ) - 1;
+                    int         i_len       = strlen( psz_tag ) - 1;
                     char       *psz_lastTag = NULL;
 
                     if( i_len >= 0 )
                     {
-                        psz_lastTag = psz_tagStack + i_len;
+                        psz_lastTag = psz_tag + i_len;
                         i_len = 0;
 
                         switch( *psz_lastTag )
@@ -772,7 +773,7 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
         strcpy( psz_html, "</text>" );
         psz_html += 7;
 
-        if( psz_tagStack[ 0 ] != '\0' )
+        if( psz_tag[ 0 ] != '\0' )
         {
             /* Not well formed -- kill everything */
             free( psz_html_start );
@@ -784,5 +785,6 @@ static char *CreateHtmlSubtitle( char *psz_subtitle )
             psz_html_start = realloc( psz_html_start,  psz_html - psz_html_start + 1 );
         }
     }
+    free( psz_tag );
     return psz_html_start;
 }




More information about the vlc-devel mailing list