correct realloc() usage, on failure realloc will return NULL
authorJean-Paul Saman <jpsaman@videolan.org>
Sun, 24 May 2009 17:46:56 +0000 (19:46 +0200)
committerJean-Paul Saman <jpsaman@videolan.org>
Sun, 24 May 2009 17:46:56 +0000 (19:46 +0200)
13 files changed:
src/control/media_list_path.h
src/extras/libc.c
src/input/es_out.c
src/input/input.c
src/input/stream.c
src/input/vlmshell.c
src/modules/entry.c
src/modules/modules.c
src/network/acl.c
src/network/httpd.c
src/network/io.c
src/playlist/fetcher.c
src/text/strings.c

index c3e698d..da387e1 100644 (file)
@@ -61,10 +61,15 @@ static inline int libvlc_media_list_path_deepness( libvlc_media_list_path_t path
  **************************************************************************/
 static inline void libvlc_media_list_path_append( libvlc_media_list_path_t * p_path, int index )
 {
+    libvlc_media_list_path_t *p_tmp;
     int old_deepness = libvlc_media_list_path_deepness( *p_path );
-    *p_path = realloc( *p_path, sizeof(int)*(old_deepness+2));
-    *p_path[old_deepness] = index;
-    *p_path[old_deepness+1] = -1;
+    *p_tmp = realloc( *p_path, sizeof(int)*(old_deepness+2));
+    if( *p_tmp )
+    {
+        *p_tmp = *p_path;
+        *p_path[old_deepness] = index;
+        *p_path[old_deepness+1] = -1;
+    }
 }
 
 /**************************************************************************
index 6473497..8e9a411 100644 (file)
@@ -571,7 +571,9 @@ int __vlc_execve( vlc_object_t *p_object, int i_argc, char *const *ppsz_argv,
               || i_read == 0 )
             break;
         *pi_data += i_read;
-        *pp_data = realloc( *pp_data, *pi_data + 1025 );
+        char *p_tmp = realloc( *pp_data, *pi_data + 1025 );
+        if( p_tmp )
+            *pp_data = p_tmp;
     }
 
     while ( !p_object->b_die
index 22d4026..85cebf1 100644 (file)
@@ -2277,10 +2277,14 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args )
 
             if( p_fmt->i_extra )
             {
-                es->fmt.i_extra = p_fmt->i_extra;
-                es->fmt.p_extra = realloc( es->fmt.p_extra, p_fmt->i_extra );
-                memcpy( es->fmt.p_extra, p_fmt->p_extra, p_fmt->i_extra );
-
+                void *p_tmp;
+                p_tmp =  realloc( es->fmt.p_extra, p_fmt->i_extra );
+                if( p_tmp )
+                {
+                    es->fmt.i_extra = p_fmt->i_extra;
+                    es->fmt.p_extra = p_tmp;
+                    memcpy( es->fmt.p_extra, p_fmt->p_extra, p_fmt->i_extra );
+                }
                 if( !es->p_dec )
                     return VLC_SUCCESS;
 #if 1
@@ -2288,11 +2292,14 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args )
 
                 EsCreateDecoder( out, es );
 #else
-                es->p_dec->fmt_in.i_extra = p_fmt->i_extra;
-                es->p_dec->fmt_in.p_extra =
-                    realloc( es->p_dec->fmt_in.p_extra, p_fmt->i_extra );
-                memcpy( es->p_dec->fmt_in.p_extra,
-                        p_fmt->p_extra, p_fmt->i_extra );
+                p_tmp = realloc( es->p_dec->fmt_in.p_extra, p_fmt->i_extra );
+                if( p_tmp )
+                {
+                    es->p_dec->fmt_in.i_extra = p_fmt->i_extra;
+                    es->p_dec->fmt_in.p_extra = p_tmp;
+                    memcpy( es->p_dec->fmt_in.p_extra,
+                            p_fmt->p_extra, p_fmt->i_extra );
+                }
 #endif
             }
 
index cfb3065..f90128a 100644 (file)
@@ -2913,19 +2913,23 @@ static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_atta
                               int i_new, input_attachment_t **pp_new )
 {
     int i_attachment = *pi_attachment;
-    input_attachment_t **attachment = *ppp_attachment;
+    input_attachment_t **attachment;
     int i;
 
-    attachment = realloc( attachment,
+    attachment = realloc( *ppp_attachment,
                           sizeof(input_attachment_t**) * ( i_attachment + i_new ) );
-    for( i = 0; i < i_new; i++ )
-        attachment[i_attachment++] = pp_new[i];
-    free( pp_new );
+    if( attachment )
+    {
+        for( i = 0; i < i_new; i++ )
+            attachment[i_attachment++] = pp_new[i];
+        free( pp_new );
 
-    /* */
-    *pi_attachment = i_attachment;
-    *ppp_attachment = attachment;
+        /* */
+        *pi_attachment = i_attachment;
+        *ppp_attachment = attachment;
+    }
 }
+
 /*****************************************************************************
  * InputGetExtraFiles
  *  Autodetect extra input list
index 23276e3..1e1c102 100644 (file)
@@ -796,12 +796,14 @@ static int AStreamPeekBlock( stream_t *s, const uint8_t **pp_peek, unsigned int
     /* We need to create a local copy */
     if( p_sys->i_peek < i_read )
     {
-        p_sys->p_peek = realloc( p_sys->p_peek, i_read );
-        if( !p_sys->p_peek )
+        uint8_t *p_tmp;
+        p_tmp = realloc( p_sys->p_peek, i_read );
+        if( !p_tmp )
         {
             p_sys->i_peek = 0;
             return 0;
         }
+        p_sys->p_peek = p_tmp;
         p_sys->i_peek = i_read;
     }
 
@@ -1170,13 +1172,15 @@ static int AStreamPeekStream( stream_t *s, const uint8_t **pp_peek, unsigned int
 
     if( p_sys->i_peek < i_read )
     {
-        p_sys->p_peek = realloc( p_sys->p_peek, i_read );
-        if( !p_sys->p_peek )
+        uint8_t *p_tmp;
+        p_tmp = realloc( p_sys->p_peek, i_read );
+        if( !p_tmp )
         {
             p_sys->i_peek = 0;
             return 0;
         }
         p_sys->i_peek = i_read;
+        p_sys->p_peek = p_tmp;
     }
 
     memcpy( p_sys->p_peek, &tk->p_buffer[i_off],
@@ -1587,10 +1591,12 @@ char *stream_ReadLine( stream_t *s )
 
         if( psz_eol )
         {
+            char *p_tmp;
             i_data = (psz_eol - (char *)p_data) + 1;
-            p_line = realloc( p_line, i_line + i_data + s->p_text->i_char_width ); /* add \0 */
-            if( !p_line )
+            p_tmp = realloc( p_line, i_line + i_data + s->p_text->i_char_width ); /* add \0 */
+            if( !p_tmp )
                 goto error;
+            p_line = p_tmp;
             i_data = stream_Read( s, &p_line[i_line], i_data );
             if( i_data <= 0 ) break; /* Hmmm */
             i_line += i_data - s->p_text->i_char_width; /* skip \n */;
@@ -1601,9 +1607,11 @@ char *stream_ReadLine( stream_t *s )
         }
 
         /* Read data (+1 for easy \0 append) */
-        p_line = realloc( p_line, i_line + STREAM_PROBE_LINE + s->p_text->i_char_width );
-        if( !p_line )
+        char *p_tmp;
+        p_tmp = realloc( p_line, i_line + STREAM_PROBE_LINE + s->p_text->i_char_width );
+        if( !p_tmp )
             goto error;
+        p_line = p_tmp;
         i_data = stream_Read( s, &p_line[i_line], STREAM_PROBE_LINE );
         if( i_data <= 0 ) break; /* Hmmm */
         i_line += i_data;
index ba62608..c993ced 100644 (file)
@@ -641,7 +641,11 @@ static int ExecuteScheduleProperty( vlm_t *p_vlm, vlm_schedule_sys_t *p_schedule
             psz_line = strdup( ppsz_property[i] );
             for( j = i+1; j < i_property; j++ )
             {
-                psz_line = realloc( psz_line, strlen(psz_line) + strlen(ppsz_property[j]) + 1 + 1 );
+                char *psz_tmp;
+                psz_tmp = realloc( psz_line, strlen(psz_line) + strlen(ppsz_property[j]) + 1 + 1 );
+                if( !psz_tmp )
+                    break;
+                psz_line = psz_tmp;
                 strcat( psz_line, " " );
                 strcat( psz_line, ppsz_property[j] );
             }
index 647bf9d..997a7bd 100644 (file)
@@ -142,7 +142,7 @@ static module_config_t *vlc_config_create (module_t *module, int type)
 
     if ((confsize & 0xf) == 0)
     {
-        tab = realloc (tab, (confsize + 17) * sizeof (*tab));
+        tab = realloc (module->p_config, (confsize + 17) * sizeof (*tab));
         if (tab == NULL)
             return NULL;
 
index c69cf70..69d3666 100644 (file)
@@ -1217,8 +1217,11 @@ static int AllocatePluginFile( vlc_object_t * p_this, module_bank_t *p_bank,
             return 0;
 
         /* Add entry to cache */
-        p_bank->pp_cache =
-            realloc( p_bank->pp_cache, (p_bank->i_cache + 1) * sizeof(void *) );
+        module_cache_t *p_tmp;
+        p_tmp = realloc( p_bank->pp_cache, (p_bank->i_cache + 1) * sizeof(void *) );
+        if( !p_tmp )
+            return -1;
+        *p_bank->pp_cache = p_tmp;
         p_bank->pp_cache[p_bank->i_cache] = malloc( sizeof(module_cache_t) );
         if( !p_bank->pp_cache[p_bank->i_cache] )
             return -1;
index c177781..fba3217 100644 (file)
@@ -163,11 +163,12 @@ int ACL_AddNet( vlc_acl_t *p_acl, const char *psz_ip, int i_len,
 
     i_size = p_acl->i_size;
     p_ent = (vlc_acl_entry_t *)realloc( p_acl->p_entries,
-                                        ++p_acl->i_size * sizeof( *p_ent ) );
+                                        (p_acl->i_size+1) * sizeof( *p_ent ) );
 
     if( p_ent == NULL )
         return -1;
 
+    p_acl->i_size++;
     p_acl->p_entries = p_ent;
     p_ent += i_size;
 
index 7bfc071..39493bd 100644 (file)
@@ -561,9 +561,14 @@ httpd_HandlerCallBack( httpd_callback_sys_t *p_sys, httpd_client_t *cl,
 
         if( p != NULL )
         {
+            httpd_message_t *p_msg;
             p[4] = '\0';
-            answer->i_body = strlen((char*)answer->p_body) + 1;
-            answer->p_body = realloc( answer->p_body, answer->i_body );
+            p_msg = realloc( answer->p_body, strlen((char*)answer->p_body) + 1 );
+            if( p_msg )
+            {
+                answer->i_body = strlen((char*)answer->p_body) + 1;
+                answer->p_body = p_msg;
+            }
         }
     }
 
index 313e0e8..3134a5a 100644 (file)
@@ -507,8 +507,15 @@ char *__net_Gets( vlc_object_t *p_this, int fd, const v_socket_t *p_vs )
     {
         if( i_line == i_max )
         {
+            char *psz_tmp;
             i_max += 1024;
-            psz_line = realloc( psz_line, i_max );
+            psz_tmp = realloc( psz_line, i_max );
+            if( !psz_tmp )
+            {
+                free( psz_line );
+                return NULL;
+            }
+            psz_line = psz_tmp;
             ptr = psz_line + i_line;
         }
 
index c9384b4..c9cf8aa 100644 (file)
@@ -278,15 +278,17 @@ static int DownloadArt( playlist_fetcher_t *p_fetcher, input_item_t *p_item )
     int i_data = 0;
     for( ;; )
     {
+        uint8_t *p_tmp;
         int i_read = 65536;
 
         if( i_data >= INT_MAX - i_read )
             break;
 
-        p_data = realloc( p_data, i_data + i_read );
-        if( !p_data )
+        p_tmp = realloc( p_data, i_data + i_read );
+        if( !p_tmp )
             break;
 
+        p_data = p_tmp;
         i_read = stream_Read( p_stream, &p_data[i_data], i_read );
         if( i_read <= 0 )
             break;
index 9c6d931..4a2da5c 100644 (file)
@@ -699,11 +699,16 @@ char *str_format_time( const char *tformat )
 #define INSERT_STRING( string )                                     \
                     if( string != NULL )                            \
                     {                                               \
+                        char *tmp;                                  \
                         int len = strlen( string );                 \
-                        dst = realloc( dst, i_size = i_size + len );\
-                        memcpy( (dst+d), string, len );             \
-                        d += len;                                   \
-                        free( string );                             \
+                        tmp = realloc( dst, i_size = i_size + len );\
+                        if( tmp )                                   \
+                        {                                           \
+                            dst = tmp;                              \
+                            memcpy( (dst+d), string, len );         \
+                            d += len;                               \
+                            free( string );                         \
+                        }                                           \
                     }                                               \
                     else if( !b_empty_if_na )                       \
                     {                                               \
@@ -714,10 +719,15 @@ char *str_format_time( const char *tformat )
 /* same than INSERT_STRING, except that string won't be freed */
 #define INSERT_STRING_NO_FREE( string )                             \
                     {                                               \
+                        char *tmp;                                  \
                         int len = strlen( string );                 \
-                        dst = realloc( dst, i_size = i_size + len );\
-                        memcpy( dst+d, string, len );               \
-                        d += len;                                   \
+                        tmp = realloc( dst, i_size = i_size + len );\
+                        if( tmp )                                   \
+                        {                                           \
+                            dst = tmp;                              \
+                            memcpy( dst+d, string, len );           \
+                            d += len;                               \
+                        }                                           \
                     }
 char *__str_format_meta( vlc_object_t *p_object, const char *string )
 {