From: Jean-Paul Saman Date: Sun, 24 May 2009 17:46:56 +0000 (+0200) Subject: correct realloc() usage, on failure realloc will return NULL X-Git-Tag: 1.1.0-ff~5764^2~6 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=ec5d86115480e2ba0f3b36b11c19570cbc75aa51;p=vlc correct realloc() usage, on failure realloc will return NULL --- diff --git a/src/control/media_list_path.h b/src/control/media_list_path.h index c3e698d06d..da387e11f3 100644 --- a/src/control/media_list_path.h +++ b/src/control/media_list_path.h @@ -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; + } } /************************************************************************** diff --git a/src/extras/libc.c b/src/extras/libc.c index 6473497124..8e9a411163 100644 --- a/src/extras/libc.c +++ b/src/extras/libc.c @@ -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 diff --git a/src/input/es_out.c b/src/input/es_out.c index 22d4026130..85cebf1e7b 100644 --- a/src/input/es_out.c +++ b/src/input/es_out.c @@ -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 } diff --git a/src/input/input.c b/src/input/input.c index cfb306575a..f90128a34a 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -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 diff --git a/src/input/stream.c b/src/input/stream.c index 23276e31a9..1e1c102b2b 100644 --- a/src/input/stream.c +++ b/src/input/stream.c @@ -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; diff --git a/src/input/vlmshell.c b/src/input/vlmshell.c index ba62608c1c..c993ced5ca 100644 --- a/src/input/vlmshell.c +++ b/src/input/vlmshell.c @@ -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] ); } diff --git a/src/modules/entry.c b/src/modules/entry.c index 647bf9d8b4..997a7bdac2 100644 --- a/src/modules/entry.c +++ b/src/modules/entry.c @@ -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; diff --git a/src/modules/modules.c b/src/modules/modules.c index c69cf70d01..69d3666898 100644 --- a/src/modules/modules.c +++ b/src/modules/modules.c @@ -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; diff --git a/src/network/acl.c b/src/network/acl.c index c177781195..fba3217ebf 100644 --- a/src/network/acl.c +++ b/src/network/acl.c @@ -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; diff --git a/src/network/httpd.c b/src/network/httpd.c index 7bfc071f04..39493bdc18 100644 --- a/src/network/httpd.c +++ b/src/network/httpd.c @@ -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; + } } } diff --git a/src/network/io.c b/src/network/io.c index 313e0e8a94..3134a5a074 100644 --- a/src/network/io.c +++ b/src/network/io.c @@ -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; } diff --git a/src/playlist/fetcher.c b/src/playlist/fetcher.c index c9384b4d24..c9cf8aabb6 100644 --- a/src/playlist/fetcher.c +++ b/src/playlist/fetcher.c @@ -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; diff --git a/src/text/strings.c b/src/text/strings.c index 9c6d9315e1..4a2da5c9ea 100644 --- a/src/text/strings.c +++ b/src/text/strings.c @@ -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 ) {