From 4e4720311a10bf0917cc826369438c6565d56a4f Mon Sep 17 00:00:00 2001 From: JP Dinger Date: Sat, 5 Dec 2009 09:11:42 +0100 Subject: [PATCH] Introduce realloc_or_free() to src/*, and add assert() to mark unhandled ENOMEM error conditions. Allocation shrinking or otherwise handled allocations don't need realloc_or_free. --- src/control/media_list_path.h | 10 +++++++++- src/extras/libc.c | 4 +++- src/input/es_out.c | 9 +++++++-- src/input/input.c | 6 ++++-- src/input/stream.c | 11 +++++++---- src/input/vlmshell.c | 5 ++++- src/misc/messages.c | 8 +++++--- src/misc/objects.c | 9 ++++----- src/misc/variables.c | 10 +++++++--- src/modules/entry.c | 3 ++- src/modules/modules.c | 3 ++- src/network/httpd.c | 3 ++- src/network/io.c | 4 +++- src/playlist/fetcher.c | 4 ++-- src/text/strings.c | 2 ++ 15 files changed, 63 insertions(+), 28 deletions(-) diff --git a/src/control/media_list_path.h b/src/control/media_list_path.h index 253edd6bd7..994587ce56 100644 --- a/src/control/media_list_path.h +++ b/src/control/media_list_path.h @@ -25,6 +25,9 @@ #ifndef _LIBVLC_MEDIA_LIST_PATH_H #define _LIBVLC_MEDIA_LIST_PATH_H 1 +#include +#include + typedef int * libvlc_media_list_path_t; /* (Media List Player Internal) */ /************************************************************************** @@ -50,6 +53,7 @@ static inline void libvlc_media_list_path_dump( const libvlc_media_list_path_t p static inline libvlc_media_list_path_t libvlc_media_list_path_empty( void ) { libvlc_media_list_path_t ret = malloc(sizeof(int)); + assert( ret ); ret[0] = -1; return ret; } @@ -60,6 +64,7 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_empty( void ) static inline libvlc_media_list_path_t libvlc_media_list_path_with_root_index( int index ) { libvlc_media_list_path_t ret = malloc(sizeof(int)*2); + assert( ret ); ret[0] = index; ret[1] = -1; return ret; @@ -81,7 +86,8 @@ static inline int libvlc_media_list_path_depth( const libvlc_media_list_path_t p static inline void libvlc_media_list_path_append( libvlc_media_list_path_t * p_path, int index ) { int old_depth = libvlc_media_list_path_depth( *p_path ); - *p_path = realloc( *p_path, sizeof(int)*(old_depth+2)); + *p_path = realloc_or_free( *p_path, sizeof(int)*(old_depth+2)); + assert( *p_path ); *p_path[old_depth] = index; *p_path[old_depth+1] = -1; } @@ -94,6 +100,7 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_copy_by_appending( libvlc_media_list_path_t ret; int old_depth = libvlc_media_list_path_depth( path ); ret = malloc( sizeof(int) * (old_depth + 2) ); + assert( ret ); memcpy( ret, path, sizeof(int) * old_depth ); ret[old_depth] = index; ret[old_depth+1] = -1; @@ -108,6 +115,7 @@ static inline libvlc_media_list_path_t libvlc_media_list_path_copy( const libvlc libvlc_media_list_path_t ret; int depth = libvlc_media_list_path_depth( path ); ret = malloc( sizeof(int)*(depth+1) ); + assert( ret ); memcpy( ret, path, sizeof(int)*(depth+1) ); return ret; } diff --git a/src/extras/libc.c b/src/extras/libc.c index ada9f6e2ed..568e482d85 100644 --- a/src/extras/libc.c +++ b/src/extras/libc.c @@ -30,6 +30,7 @@ #endif #include +#include #include @@ -865,7 +866,8 @@ 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 ); + *pp_data = realloc_or_free( *pp_data, *pi_data + 1025 ); + assert( *pp_data ); } while ( !p_object->b_die diff --git a/src/input/es_out.c b/src/input/es_out.c index f944502673..a7c7c23a06 100644 --- a/src/input/es_out.c +++ b/src/input/es_out.c @@ -39,6 +39,8 @@ #include #include +#include + #include "input_internal.h" #include "clock.h" #include "decoder.h" @@ -2346,7 +2348,9 @@ 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 ); + es->fmt.p_extra = realloc_or_free( es->fmt.p_extra, + p_fmt->i_extra ); + assert( es->fmt.p_extra ); memcpy( es->fmt.p_extra, p_fmt->p_extra, p_fmt->i_extra ); if( !es->p_dec ) @@ -2358,7 +2362,8 @@ static int EsOutControlLocked( es_out_t *out, int i_query, va_list args ) #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 ); + realloc_or_free( es->p_dec->fmt_in.p_extra, p_fmt->i_extra ); + assert( es->p_dec->fmt_in.p_extra ); 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 ad3f049848..3a3cf3c1ef 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -30,6 +30,7 @@ #endif #include +#include #include #include @@ -2925,8 +2926,9 @@ static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_atta input_attachment_t **attachment = *ppp_attachment; int i; - attachment = realloc( attachment, - sizeof(input_attachment_t**) * ( i_attachment + i_new ) ); + attachment = realloc_or_free( attachment, + sizeof(input_attachment_t**) * ( i_attachment + i_new ) ); + assert( attachment ); for( i = 0; i < i_new; i++ ) attachment[i_attachment++] = pp_new[i]; free( pp_new ); diff --git a/src/input/stream.c b/src/input/stream.c index b656822baf..00ecbae76c 100644 --- a/src/input/stream.c +++ b/src/input/stream.c @@ -32,6 +32,7 @@ #include #include #include +#include #include @@ -805,7 +806,7 @@ 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 ); + p_sys->p_peek = realloc_or_free( p_sys->p_peek, i_read ); if( !p_sys->p_peek ) { p_sys->i_peek = 0; @@ -1112,7 +1113,7 @@ 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 ); + p_sys->p_peek = realloc_or_free( p_sys->p_peek, i_read ); if( !p_sys->p_peek ) { p_sys->i_peek = 0; @@ -1601,7 +1602,8 @@ char *stream_ReadLine( stream_t *s ) if( psz_eol ) { 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 */ + p_line = realloc_or_free( p_line, + i_line + i_data + s->p_text->i_char_width ); /* add \0 */ if( !p_line ) goto error; i_data = stream_Read( s, &p_line[i_line], i_data ); @@ -1614,7 +1616,8 @@ 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 ); + p_line = realloc_or_free( p_line, + i_line + STREAM_PROBE_LINE + s->p_text->i_char_width ); if( !p_line ) goto error; i_data = stream_Read( s, &p_line[i_line], STREAM_PROBE_LINE ); diff --git a/src/input/vlmshell.c b/src/input/vlmshell.c index 22e5fc2499..e9be2c50aa 100644 --- a/src/input/vlmshell.c +++ b/src/input/vlmshell.c @@ -31,6 +31,7 @@ #endif #include +#include #include #include /* tolower() */ @@ -640,7 +641,9 @@ 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 ); + psz_line = realloc_or_free( psz_line, + strlen(psz_line) + strlen(ppsz_property[j]) + 1 + 1 ); + assert( psz_line ); strcat( psz_line, " " ); strcat( psz_line, ppsz_property[j] ); } diff --git a/src/misc/messages.c b/src/misc/messages.c index eaafc8862b..f08a0a98cd 100644 --- a/src/misc/messages.c +++ b/src/misc/messages.c @@ -33,6 +33,7 @@ #endif #include +#include #include /* va_list for BSD */ @@ -381,7 +382,6 @@ static void QueueMsg( vlc_object_t *p_this, int i_type, const char *psz_module, } msg_item_t * p_item = malloc (sizeof (*p_item)); - if (p_item == NULL) return; /* Uho! */ @@ -401,13 +401,15 @@ static void QueueMsg( vlc_object_t *p_this, int i_type, const char *psz_module, if( psz_header ) { psz_old = strdup( psz_header ); - psz_header = (char*)realloc( psz_header, i_header_size ); + psz_header = realloc_or_free( psz_header, i_header_size ); + assert( psz_header ); snprintf( psz_header, i_header_size , "[%s] %s", p_obj->psz_header, psz_old ); } else { - psz_header = (char *)malloc( i_header_size ); + psz_header = malloc( i_header_size ); + assert( psz_header ); snprintf( psz_header, i_header_size, "[%s]", p_obj->psz_header ); } diff --git a/src/misc/objects.c b/src/misc/objects.c index 3d5a13ed34..f53bf4eafa 100644 --- a/src/misc/objects.c +++ b/src/misc/objects.c @@ -37,6 +37,7 @@ #endif #include +#include #include "../libvlc.h" #include @@ -1123,11 +1124,9 @@ static void DumpStructure( vlc_object_t *p_this, int i_level, char *psz_foo ) static vlc_list_t * NewList( int i_count ) { - vlc_list_t * p_list = (vlc_list_t *)malloc( sizeof( vlc_list_t ) ); + vlc_list_t * p_list = malloc( sizeof( vlc_list_t ) ); if( p_list == NULL ) - { return NULL; - } p_list->i_count = i_count; @@ -1169,8 +1168,8 @@ static void ListReplace( vlc_list_t *p_list, vlc_object_t *p_object, return; } - p_list->p_values = realloc( p_list->p_values, (p_list->i_count + 1) - * sizeof( vlc_value_t ) ); + p_list->p_values = realloc_or_free( p_list->p_values, + (p_list->i_count + 1) * sizeof( vlc_value_t ) ); if( p_list->p_values == NULL ) { p_list->i_count = 0; diff --git a/src/misc/variables.c b/src/misc/variables.c index 714ed58a09..23cd3d943c 100644 --- a/src/misc/variables.c +++ b/src/misc/variables.c @@ -30,6 +30,7 @@ #include #include +#include #include "variables.h" #include "libvlc.h" @@ -217,8 +218,9 @@ int __var_Create( vlc_object_t *p_this, const char *psz_name, int i_type ) if( (p_priv->i_vars & 15) == 15 ) { - p_priv->p_vars = realloc( p_priv->p_vars, + p_priv->p_vars = realloc_or_free( p_priv->p_vars, (p_priv->i_vars+17) * sizeof(variable_t) ); + assert( p_priv->p_vars ); } memmove( p_priv->p_vars + i_new + 1, @@ -389,8 +391,10 @@ int __var_Destroy( vlc_object_t *p_this, const char *psz_name ) if( (p_priv->i_vars & 15) == 0 ) { - p_priv->p_vars = realloc( p_priv->p_vars, - (p_priv->i_vars) * sizeof( variable_t ) ); + variable_t *p_vars = realloc( p_priv->p_vars, + (p_priv->i_vars) * sizeof( variable_t ) ); + if( p_vars ) + p_priv->p_vars = p_vars; } p_priv->i_vars--; diff --git a/src/modules/entry.c b/src/modules/entry.c index c97739dbd8..a3679f17f7 100644 --- a/src/modules/entry.c +++ b/src/modules/entry.c @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -128,7 +129,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_or_free (tab, (confsize + 17) * sizeof (*tab)); if (tab == NULL) return NULL; diff --git a/src/modules/modules.c b/src/modules/modules.c index ddb2b4bd23..fe18c9337a 100644 --- a/src/modules/modules.c +++ b/src/modules/modules.c @@ -30,6 +30,7 @@ #include #include +#include #include "libvlc.h" #include /* free(), strtol() */ @@ -1077,7 +1078,7 @@ static int AllocatePluginFile( vlc_object_t * p_this, module_bank_t *p_bank, /* Add entry to cache */ module_cache_t **pp_cache = p_bank->pp_cache; - pp_cache = realloc( pp_cache, (p_bank->i_cache + 1) * sizeof(void *) ); + pp_cache = realloc_or_free( pp_cache, (p_bank->i_cache + 1) * sizeof(void *) ); if( pp_cache == NULL ) return -1; pp_cache[p_bank->i_cache] = malloc( sizeof(module_cache_t) ); diff --git a/src/network/httpd.c b/src/network/httpd.c index 9103194929..c29250f61e 100644 --- a/src/network/httpd.c +++ b/src/network/httpd.c @@ -563,7 +563,8 @@ httpd_HandlerCallBack( httpd_callback_sys_t *p_sys, httpd_client_t *cl, { p[4] = '\0'; answer->i_body = strlen((char*)answer->p_body) + 1; - answer->p_body = realloc( answer->p_body, answer->i_body ); + uint8_t *p_body = realloc( answer->p_body, answer->i_body ); + if( p_body ) answer->p_body = p_body; } } diff --git a/src/network/io.c b/src/network/io.c index c326adc383..4870a4d9bc 100644 --- a/src/network/io.c +++ b/src/network/io.c @@ -55,6 +55,7 @@ #endif #include +#include #ifndef INADDR_ANY # define INADDR_ANY 0x00000000 @@ -522,7 +523,8 @@ char *__net_Gets( vlc_object_t *p_this, int fd, const v_socket_t *p_vs ) if( i_line == i_max ) { i_max += 1024; - psz_line = realloc( psz_line, i_max ); + psz_line = realloc_or_free( psz_line, i_max ); + assert( psz_line ); ptr = psz_line + i_line; } diff --git a/src/playlist/fetcher.c b/src/playlist/fetcher.c index d74f75f4d2..eaecfd06ad 100644 --- a/src/playlist/fetcher.c +++ b/src/playlist/fetcher.c @@ -32,12 +32,12 @@ #include #include #include +#include #include "art.h" #include "fetcher.h" #include "playlist_internal.h" - /***************************************************************************** * Structures/definitions *****************************************************************************/ @@ -293,7 +293,7 @@ static int DownloadArt( playlist_fetcher_t *p_fetcher, input_item_t *p_item ) if( i_data >= INT_MAX - i_read ) break; - p_data = realloc( p_data, i_data + i_read ); + p_data = realloc_or_free( p_data, i_data + i_read ); if( !p_data ) break; diff --git a/src/text/strings.c b/src/text/strings.c index 11b16e205e..1c507c0fe4 100644 --- a/src/text/strings.c +++ b/src/text/strings.c @@ -607,6 +607,7 @@ char *str_format_time( const char *tformat ) { \ int len = strlen( string ); \ dst = realloc( dst, i_size = i_size + len );\ + assert( dst ); \ memcpy( (dst+d), string, len ); \ d += len; \ free( string ); \ @@ -622,6 +623,7 @@ char *str_format_time( const char *tformat ) { \ int len = strlen( string ); \ dst = realloc( dst, i_size = i_size + len );\ + assert( dst ); \ memcpy( dst+d, string, len ); \ d += len; \ } -- 2.39.5