[vlc-devel] commit: Handle all memory errors in MP4 esds ( Rémi Denis-Courmont )
git version control
git at videolan.org
Sun Mar 16 22:30:21 CET 2008
vlc | branch: master | Rémi Denis-Courmont <rem at videolan.org> | Sun Mar 16 23:22:59 2008 +0200| [99f80c178a8236c18400150fff4d436f127e41b8]
Handle all memory errors in MP4 esds
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=99f80c178a8236c18400150fff4d436f127e41b8
---
modules/demux/mp4/libmp4.c | 40 +++++++++++++++++++++++++++-------------
1 files changed, 27 insertions(+), 13 deletions(-)
diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c
index 8dcbf84..22c2f90 100644
--- a/modules/demux/mp4/libmp4.c
+++ b/modules/demux/mp4/libmp4.c
@@ -885,12 +885,24 @@ static int MP4_ReadLengthDescriptor( uint8_t **pp_peek, int64_t *i_read )
return( i_len );
}
+
+static void MP4_FreeBox_esds( MP4_Box_t *p_box )
+{
+ FREENULL( p_box->data.p_esds->es_descriptor.psz_URL );
+ if( p_box->data.p_esds->es_descriptor.p_decConfigDescr )
+ {
+ FREENULL( p_box->data.p_esds->es_descriptor.p_decConfigDescr->p_decoder_specific_info );
+ FREENULL( p_box->data.p_esds->es_descriptor.p_decConfigDescr );
+ }
+}
+
static int MP4_ReadBox_esds( stream_t *p_stream, MP4_Box_t *p_box )
{
#define es_descriptor p_box->data.p_esds->es_descriptor
unsigned int i_len;
unsigned int i_flags;
unsigned int i_type;
+ unsigned int code = 0;
MP4_READBOX_ENTER( MP4_Box_data_esds_t );
@@ -958,6 +970,11 @@ static int MP4_ReadBox_esds( stream_t *p_stream, MP4_Box_t *p_box )
es_descriptor.p_decConfigDescr =
malloc( sizeof( MP4_descriptor_decoder_config_t ));
+ if( es_descriptor.p_decConfigDescr == NULL )
+ {
+ free( es_descriptor.psz_URL );
+ goto error;
+ }
MP4_GET1BYTE( es_descriptor.p_decConfigDescr->i_objectTypeIndication );
MP4_GET1BYTE( i_flags );
@@ -983,24 +1000,21 @@ static int MP4_ReadBox_esds( stream_t *p_stream, MP4_Box_t *p_box )
es_descriptor.p_decConfigDescr->i_decoder_specific_info_len = i_len;
es_descriptor.p_decConfigDescr->p_decoder_specific_info = malloc( i_len );
- if( es_descriptor.p_decConfigDescr->p_decoder_specific_info )
- memcpy( es_descriptor.p_decConfigDescr->p_decoder_specific_info,
- p_peek, i_len );
+ if( es_descriptor.p_decConfigDescr->p_decoder_specific_info == NULL )
+ {
+ MP4_FreeBox_esds( p_box );
+ goto error;
+ }
+ memcpy( es_descriptor.p_decConfigDescr->p_decoder_specific_info,
+ p_peek, i_len );
+ code = 1;
- MP4_READBOX_EXIT( 1 );
+error:
+ MP4_READBOX_EXIT( code );
#undef es_descriptor
}
-static void MP4_FreeBox_esds( MP4_Box_t *p_box )
-{
- FREENULL( p_box->data.p_esds->es_descriptor.psz_URL );
- if( p_box->data.p_esds->es_descriptor.p_decConfigDescr )
- {
- FREENULL( p_box->data.p_esds->es_descriptor.p_decConfigDescr->p_decoder_specific_info );
- }
- FREENULL( p_box->data.p_esds->es_descriptor.p_decConfigDescr );
-}
static int MP4_ReadBox_avcC( stream_t *p_stream, MP4_Box_t *p_box )
{
More information about the vlc-devel
mailing list