Commit 64fd3b59 authored by Jean-Paul Saman's avatar Jean-Paul Saman

Fix number of potential memleaks

parent b25e76f5
...@@ -529,6 +529,8 @@ static int Open( vlc_object_t *p_this ) ...@@ -529,6 +529,8 @@ static int Open( vlc_object_t *p_this )
} }
p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) ); p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
if( !p_sys )
return VLC_ENOMEM;
memset( p_sys, 0, sizeof( demux_sys_t ) ); memset( p_sys, 0, sizeof( demux_sys_t ) );
p_sys->i_packet_size = i_packet_size; p_sys->i_packet_size = i_packet_size;
...@@ -708,6 +710,13 @@ static int Open( vlc_object_t *p_this ) ...@@ -708,6 +710,13 @@ static int Open( vlc_object_t *p_this )
/* Dummy PMT */ /* Dummy PMT */
prg = malloc( sizeof( ts_prg_psi_t ) ); prg = malloc( sizeof( ts_prg_psi_t ) );
if( !prg )
{
msg_Err( p_demux, "out of memory" );
Close( VLC_OBJECT(p_demux) );
return VLC_ENOMEM;
}
memset( prg, 0, sizeof( ts_prg_psi_t ) ); memset( prg, 0, sizeof( ts_prg_psi_t ) );
prg->i_pid_pcr = -1; prg->i_pid_pcr = -1;
prg->i_pid_pmt = -1; prg->i_pid_pmt = -1;
...@@ -1419,40 +1428,49 @@ static void PIDInit( ts_pid_t *pid, vlc_bool_t b_psi, ts_psi_t *p_owner ) ...@@ -1419,40 +1428,49 @@ static void PIDInit( ts_pid_t *pid, vlc_bool_t b_psi, ts_psi_t *p_owner )
if( !b_old_valid ) if( !b_old_valid )
{ {
free( pid->psi );
pid->psi = malloc( sizeof( ts_psi_t ) ); pid->psi = malloc( sizeof( ts_psi_t ) );
pid->psi->handle= NULL; if( pid->psi )
pid->psi->i_prg = 0; {
pid->psi->prg = NULL; pid->psi->handle= NULL;
pid->psi->i_prg = 0;
pid->psi->prg = NULL;
}
} }
pid->psi->i_pat_version = -1; pid->psi->i_pat_version = -1;
pid->psi->i_sdt_version = -1; pid->psi->i_sdt_version = -1;
if( p_owner ) if( p_owner )
{ {
ts_prg_psi_t *prg = malloc( sizeof( ts_prg_psi_t ) ); ts_prg_psi_t *prg = malloc( sizeof( ts_prg_psi_t ) );
/* PMT */ if( prg )
prg->i_version = -1; {
prg->i_number = -1; /* PMT */
prg->i_pid_pcr = -1; prg->i_version = -1;
prg->i_pid_pmt = -1; prg->i_number = -1;
prg->iod = NULL; prg->i_pid_pcr = -1;
prg->handle = NULL; prg->i_pid_pmt = -1;
prg->iod = NULL;
TAB_APPEND( pid->psi->i_prg, pid->psi->prg, prg ); prg->handle = NULL;
TAB_APPEND( pid->psi->i_prg, pid->psi->prg, prg );
}
} }
} }
else else
{ {
pid->psi = NULL; pid->psi = NULL;
pid->es = malloc( sizeof( ts_es_t ) ); pid->es = malloc( sizeof( ts_es_t ) );
if( pid->es )
es_format_Init( &pid->es->fmt, UNKNOWN_ES, 0 ); {
pid->es->id = NULL; es_format_Init( &pid->es->fmt, UNKNOWN_ES, 0 );
pid->es->p_pes = NULL; pid->es->id = NULL;
pid->es->i_pes_size= 0; pid->es->p_pes = NULL;
pid->es->i_pes_gathered= 0; pid->es->i_pes_size= 0;
pid->es->pp_last = &pid->es->p_pes; pid->es->i_pes_gathered= 0;
pid->es->p_mpeg4desc = NULL; pid->es->pp_last = &pid->es->p_pes;
pid->es->b_gather = VLC_FALSE; pid->es->p_mpeg4desc = NULL;
pid->es->b_gather = VLC_FALSE;
}
} }
} }
...@@ -2055,6 +2073,7 @@ static char* IODGetURL( int *pi_data, uint8_t **pp_data ) ...@@ -2055,6 +2073,7 @@ static char* IODGetURL( int *pi_data, uint8_t **pp_data )
i_url_len = IODGetByte( pi_data, pp_data ); i_url_len = IODGetByte( pi_data, pp_data );
url = malloc( i_url_len + 1 ); url = malloc( i_url_len + 1 );
if( !url ) return NULL;
for( i = 0; i < i_url_len; i++ ) for( i = 0; i < i_url_len; i++ )
{ {
url[i] = IODGetByte( pi_data, pp_data ); url[i] = IODGetByte( pi_data, pp_data );
...@@ -2073,6 +2092,7 @@ static iod_descriptor_t *IODNew( int i_data, uint8_t *p_data ) ...@@ -2073,6 +2092,7 @@ static iod_descriptor_t *IODNew( int i_data, uint8_t *p_data )
int i_iod_length; int i_iod_length;
p_iod = malloc( sizeof( iod_descriptor_t ) ); p_iod = malloc( sizeof( iod_descriptor_t ) );
if( !p_iod ) return NULL;
memset( p_iod, 0, sizeof( iod_descriptor_t ) ); memset( p_iod, 0, sizeof( iod_descriptor_t ) );
#ifdef TS_DEBUG #ifdef TS_DEBUG
...@@ -2687,6 +2707,10 @@ static char *EITConvertToUTF8( const unsigned char *psz_instring, ...@@ -2687,6 +2707,10 @@ static char *EITConvertToUTF8( const unsigned char *psz_instring,
i_out = i_in * 6 + 1; i_out = i_in * 6 + 1;
psz_outstring = malloc( i_out ); psz_outstring = malloc( i_out );
if( !psz_outstring )
{
return NULL;
}
iconv_handle = vlc_iconv_open( "UTF-8", psz_encoding ); iconv_handle = vlc_iconv_open( "UTF-8", psz_encoding );
if( iconv_handle == (vlc_iconv_t)(-1) ) if( iconv_handle == (vlc_iconv_t)(-1) )
...@@ -3129,9 +3153,10 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt ) ...@@ -3129,9 +3153,10 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
if( pid->es->fmt.i_extra > 0 ) if( pid->es->fmt.i_extra > 0 )
{ {
pid->es->fmt.p_extra = malloc( pid->es->fmt.i_extra ); pid->es->fmt.p_extra = malloc( pid->es->fmt.i_extra );
memcpy( pid->es->fmt.p_extra, if( pid->es->fmt.p_extra )
dcd->p_decoder_specific_info, memcpy( pid->es->fmt.p_extra,
pid->es->fmt.i_extra ); dcd->p_decoder_specific_info,
pid->es->fmt.i_extra );
} }
} }
} }
...@@ -3223,8 +3248,9 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt ) ...@@ -3223,8 +3248,9 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
pid->es->fmt.i_codec = VLC_FOURCC( 't', 'e', 'l', 'x' ); pid->es->fmt.i_codec = VLC_FOURCC( 't', 'e', 'l', 'x' );
pid->es->fmt.i_extra = p_dr->i_length; pid->es->fmt.i_extra = p_dr->i_length;
pid->es->fmt.p_extra = malloc( p_dr->i_length ); pid->es->fmt.p_extra = malloc( p_dr->i_length );
memcpy( pid->es->fmt.p_extra, p_dr->p_data, if( pid->es->fmt.p_extra )
p_dr->i_length ); memcpy( pid->es->fmt.p_extra, p_dr->p_data,
p_dr->i_length );
#if defined _DVBPSI_DR_56_H_ && defined DVBPSI_VERSION \ #if defined _DVBPSI_DR_56_H_ && defined DVBPSI_VERSION \
&& DVBPSI_VERSION_INT > ((0<<16)+(1<<8)+5) && DVBPSI_VERSION_INT > ((0<<16)+(1<<8)+5)
...@@ -3257,11 +3283,12 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt ) ...@@ -3257,11 +3283,12 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
else else
{ {
p_es = malloc( sizeof( ts_es_t ) ); p_es = malloc( sizeof( ts_es_t ) );
if( !p_es ) break;
es_format_Copy( &p_es->fmt, &pid->es->fmt ); es_format_Copy( &p_es->fmt, &pid->es->fmt );
free( p_es->fmt.psz_language ); p_es->fmt.psz_language = NULL; free( p_es->fmt.psz_language );
free( p_es->fmt.psz_description ); p_es->fmt.psz_description = NULL; free( p_es->fmt.psz_description );
p_es->fmt.psz_language = NULL; p_es->fmt.psz_description = NULL;
p_es->id = NULL; p_es->id = NULL;
p_es->p_pes = NULL; p_es->p_pes = NULL;
p_es->i_pes_size = 0; p_es->i_pes_size = 0;
...@@ -3274,10 +3301,12 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt ) ...@@ -3274,10 +3301,12 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
} }
p_es->fmt.psz_language = malloc( 4 ); p_es->fmt.psz_language = malloc( 4 );
memcpy( p_es->fmt.psz_language, if( p_es->fmt.psz_language )
p_page->i_iso6392_language_code, 3 ); {
p_es->fmt.psz_language[3] = 0; memcpy( p_es->fmt.psz_language,
p_page->i_iso6392_language_code, 3 );
p_es->fmt.psz_language[3] = 0;
}
switch( p_page->i_teletext_type ) switch( p_page->i_teletext_type )
{ {
case 0x2: case 0x2:
...@@ -3330,8 +3359,9 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt ) ...@@ -3330,8 +3359,9 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
pid->es->fmt.i_codec = VLC_FOURCC( 'd', 'v', 'b', 's' ); pid->es->fmt.i_codec = VLC_FOURCC( 'd', 'v', 'b', 's' );
pid->es->fmt.i_extra = p_dr->i_length; pid->es->fmt.i_extra = p_dr->i_length;
pid->es->fmt.p_extra = malloc( p_dr->i_length ); pid->es->fmt.p_extra = malloc( p_dr->i_length );
memcpy( pid->es->fmt.p_extra, p_dr->p_data, if( pid->es->fmt.p_extra )
p_dr->i_length ); memcpy( pid->es->fmt.p_extra, p_dr->p_data,
p_dr->i_length );
#ifdef _DVBPSI_DR_59_H_ #ifdef _DVBPSI_DR_59_H_
pid->es->fmt.i_group = p_pmt->i_program_number; pid->es->fmt.i_group = p_pmt->i_program_number;
...@@ -3358,7 +3388,7 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt ) ...@@ -3358,7 +3388,7 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
else else
{ {
p_es = malloc( sizeof( ts_es_t ) ); p_es = malloc( sizeof( ts_es_t ) );
if( !p_es ) break;
es_format_Copy( &p_es->fmt, &pid->es->fmt ); es_format_Copy( &p_es->fmt, &pid->es->fmt );
free( p_es->fmt.psz_language ); p_es->fmt.psz_language = NULL; free( p_es->fmt.psz_language ); p_es->fmt.psz_language = NULL;
free( p_es->fmt.psz_description ); p_es->fmt.psz_description = NULL; free( p_es->fmt.psz_description ); p_es->fmt.psz_description = NULL;
...@@ -3375,9 +3405,12 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt ) ...@@ -3375,9 +3405,12 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
} }
p_es->fmt.psz_language = malloc( 4 ); p_es->fmt.psz_language = malloc( 4 );
memcpy( p_es->fmt.psz_language, if( p_es->fmt.psz_language )
p_sub->i_iso6392_language_code, 3 ); {
p_es->fmt.psz_language[3] = 0; memcpy( p_es->fmt.psz_language,
p_sub->i_iso6392_language_code, 3 );
p_es->fmt.psz_language[3] = 0;
}
switch( p_sub->i_subtitling_type ) switch( p_sub->i_subtitling_type )
{ {
...@@ -3501,8 +3534,9 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt ) ...@@ -3501,8 +3534,9 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
if( pid->es->fmt.i_extra > 0 ) if( pid->es->fmt.i_extra > 0 )
{ {
pid->es->fmt.p_extra = malloc( pid->es->fmt.i_extra ); pid->es->fmt.p_extra = malloc( pid->es->fmt.i_extra );
memcpy( pid->es->fmt.p_extra, &p_dr->p_data[10], if( pid->es->fmt.p_extra )
pid->es->fmt.i_extra ); memcpy( pid->es->fmt.p_extra, &p_dr->p_data[10],
pid->es->fmt.i_extra );
} }
} }
else else
...@@ -3533,10 +3567,13 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt ) ...@@ -3533,10 +3567,13 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
{ {
#if defined(DR_0A_API_VER) && (DR_0A_API_VER >= 2) #if defined(DR_0A_API_VER) && (DR_0A_API_VER >= 2)
pid->es->fmt.psz_language = malloc( 4 ); pid->es->fmt.psz_language = malloc( 4 );
memcpy( pid->es->fmt.psz_language, if( pid->es->fmt.psz_language )
p_decoded->code[0].iso_639_code, 3 ); {
pid->es->fmt.psz_language[3] = 0; memcpy( pid->es->fmt.psz_language,
msg_Dbg( p_demux, "found language: %s", pid->es->fmt.psz_language); p_decoded->code[0].iso_639_code, 3 );
pid->es->fmt.psz_language[3] = 0;
msg_Dbg( p_demux, "found language: %s", pid->es->fmt.psz_language);
}
switch( p_decoded->code[0].i_audio_type ) { switch( p_decoded->code[0].i_audio_type ) {
case 0: case 0:
pid->es->fmt.psz_description = NULL; pid->es->fmt.psz_description = NULL;
...@@ -3564,43 +3601,53 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt ) ...@@ -3564,43 +3601,53 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
pid->es->fmt.p_extra_languages = pid->es->fmt.p_extra_languages =
malloc( sizeof(*pid->es->fmt.p_extra_languages) * malloc( sizeof(*pid->es->fmt.p_extra_languages) *
pid->es->fmt.i_extra_languages ); pid->es->fmt.i_extra_languages );
for( i = 0; i < pid->es->fmt.i_extra_languages; i++ ) { if( pid->es->fmt.p_extra_languages )
msg_Dbg( p_demux, "bang" ); {
pid->es->fmt.p_extra_languages[i].psz_language = for( i = 0; i < pid->es->fmt.i_extra_languages; i++ )
malloc(4); {
memcpy(pid->es->fmt.p_extra_languages[i].psz_language, msg_Dbg( p_demux, "bang" );
p_decoded->code[i+1].iso_639_code, 3 ); pid->es->fmt.p_extra_languages[i].psz_language =
pid->es->fmt.p_extra_languages[i].psz_language[3] = '\0'; malloc(4);
switch( p_decoded->code[i].i_audio_type ) { if( pid->es->fmt.p_extra_languages[i].psz_language )
case 0: {
pid->es->fmt.p_extra_languages[i].psz_description = memcpy( pid->es->fmt.p_extra_languages[i].psz_language,
NULL; p_decoded->code[i+1].iso_639_code, 3 );
break; pid->es->fmt.p_extra_languages[i].psz_language[3] = '\0';
case 1: }
pid->es->fmt.p_extra_languages[i].psz_description = switch( p_decoded->code[i].i_audio_type ) {
strdup(_("clean effects")); case 0:
break; pid->es->fmt.p_extra_languages[i].psz_description =
case 2: NULL;
pid->es->fmt.p_extra_languages[i].psz_description = break;
strdup(_("hearing impaired")); case 1:
break; pid->es->fmt.p_extra_languages[i].psz_description =
case 3: strdup(_("clean effects"));
pid->es->fmt.p_extra_languages[i].psz_description = break;
strdup(_("visual impaired commentary")); case 2:
break; pid->es->fmt.p_extra_languages[i].psz_description =
default: strdup(_("hearing impaired"));
msg_Dbg( p_demux, "unknown audio type: %d", break;
p_decoded->code[i].i_audio_type); case 3:
pid->es->fmt.psz_description = NULL; pid->es->fmt.p_extra_languages[i].psz_description =
break; strdup(_("visual impaired commentary"));
} break;
default:
msg_Dbg( p_demux, "unknown audio type: %d",
p_decoded->code[i].i_audio_type);
pid->es->fmt.psz_description = NULL;
break;
}
}
} }
#else #else
pid->es->fmt.psz_language = malloc( 4 ); pid->es->fmt.psz_language = malloc( 4 );
memcpy( pid->es->fmt.psz_language, if( pid->es->fmt.psz_language )
p_decoded->i_iso_639_code, 3 ); {
pid->es->fmt.psz_language[3] = 0; memcpy( pid->es->fmt.psz_language,
p_decoded->i_iso_639_code, 3 );
pid->es->fmt.psz_language[3] = 0;
}
#endif #endif
} }
} }
......
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