Commit ec5d8611 authored by Jean-Paul Saman's avatar Jean-Paul Saman

correct realloc() usage, on failure realloc will return NULL

parent ac72368d
......@@ -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;
}
}
/**************************************************************************
......
......@@ -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
......
......@@ -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
}
......
......@@ -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
......
......@@ -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;
......
......@@ -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] );
}
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
}
}
}
......
......@@ -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;
}
......
......@@ -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;
......
......@@ -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 )
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment