[vlc-commits] demux: avi: handle zero sized strd sections (fix #8994)
Francois Cartegnie
git at videolan.org
Sun Aug 25 18:22:21 CEST 2013
vlc/vlc-2.1 | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Fri Aug 23 18:36:36 2013 +0200| [1e7a81d6c1d2ffebd0bd052b1767eb862a6a3eff] | committer: Jean-Baptiste Kempf
demux: avi: handle zero sized strd sections (fix #8994)
Sunplus chipset based cameras creates those zero sized proprietary
sections.
(cherry picked from commit e0e03582378dc7df8b37e3fb01c4d1aaeccd437b)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.1.git/?a=commit;h=1e7a81d6c1d2ffebd0bd052b1767eb862a6a3eff
---
modules/demux/avi/libavi.c | 14 +++++++++++++-
modules/demux/avi/libavi.h | 1 +
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/modules/demux/avi/libavi.c b/modules/demux/avi/libavi.c
index 80f0f84..c09175f 100644
--- a/modules/demux/avi/libavi.c
+++ b/modules/demux/avi/libavi.c
@@ -446,6 +446,12 @@ static void AVI_ChunkFree_strf( avi_chunk_t *p_chk )
static int AVI_ChunkRead_strd( stream_t *s, avi_chunk_t *p_chk )
{
+ if ( p_chk->common.i_chunk_size == 0 )
+ {
+ msg_Dbg( (vlc_object_t*)s, "Zero sized pre-JUNK section met" );
+ return AVI_STRD_ZERO_CHUNK;
+ }
+
AVI_READCHUNK_ENTER;
p_chk->strd.p_data = xmalloc( p_chk->common.i_chunk_size );
memcpy( p_chk->strd.p_data, p_buff + 8, p_chk->common.i_chunk_size );
@@ -832,7 +838,13 @@ int AVI_ChunkRead( stream_t *s, avi_chunk_t *p_chk, avi_chunk_t *p_father )
i_index = AVI_ChunkFunctionFind( p_chk->common.i_chunk_fourcc );
if( AVI_Chunk_Function[i_index].AVI_ChunkRead_function )
{
- return AVI_Chunk_Function[i_index].AVI_ChunkRead_function( s, p_chk );
+ int i_return = AVI_Chunk_Function[i_index].AVI_ChunkRead_function( s, p_chk );
+ if ( i_return == AVI_STRD_ZERO_CHUNK )
+ {
+ if ( !p_father ) return VLC_EGENERIC;
+ return AVI_NextChunk( s, p_father );
+ }
+ return i_return;
}
else if( ( ((char*)&p_chk->common.i_chunk_fourcc)[0] == 'i' &&
((char*)&p_chk->common.i_chunk_fourcc)[1] == 'x' ) ||
diff --git a/modules/demux/avi/libavi.h b/modules/demux/avi/libavi.h
index 917bfb6..1ef830c 100644
--- a/modules/demux/avi/libavi.h
+++ b/modules/demux/avi/libavi.h
@@ -178,6 +178,7 @@ typedef struct avi_chunk_dmlh_s
uint32_t dwTotalFrames;
} avi_chunk_dmlh_t;
+#define AVI_STRD_ZERO_CHUNK 0xFF
#define AVI_INDEX_OF_INDEXES 0x00
#define AVI_INDEX_OF_CHUNKS 0x01
More information about the vlc-commits
mailing list