[vlc-commits] demux: avi: handle zero sized lists (fix #9056, fix #8413)
Francois Cartegnie
git at videolan.org
Sat Aug 24 12:28:33 CEST 2013
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Sat Aug 24 10:22:53 2013 +0200| [ad03b4e11defd03c385d4dd337a9d1d17ee9ce60] | committer: Francois Cartegnie
demux: avi: handle zero sized lists (fix #9056, fix #8413)
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ad03b4e11defd03c385d4dd337a9d1d17ee9ce60
---
modules/demux/avi/libavi.c | 8 +++++---
modules/demux/avi/libavi.h | 1 +
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/modules/demux/avi/libavi.c b/modules/demux/avi/libavi.c
index c09175f..43db2e5 100644
--- a/modules/demux/avi/libavi.c
+++ b/modules/demux/avi/libavi.c
@@ -112,6 +112,7 @@ static int AVI_ChunkRead_list( stream_t *s, avi_chunk_t *p_container )
avi_chunk_t *p_chk;
const uint8_t *p_peek;
bool b_seekable;
+ int i_ret = VLC_SUCCESS;
if( p_container->common.i_chunk_size > 0 && p_container->common.i_chunk_size < 4 )
{
@@ -173,7 +174,7 @@ static int AVI_ChunkRead_list( stream_t *s, avi_chunk_t *p_container )
}
p_container->common.p_last = p_chk;
- if( AVI_ChunkRead( s, p_chk, p_container ) )
+ if( i_ret = AVI_ChunkRead( s, p_chk, p_container ) )
{
break;
}
@@ -196,6 +197,7 @@ static int AVI_ChunkRead_list( stream_t *s, avi_chunk_t *p_container )
}
msg_Dbg( (vlc_object_t*)s, "</list \'%4.4s\'>", (char*)&p_container->list.i_type );
+ if ( i_ret == AVI_ZERO_FOURCC ) return i_ret;
return VLC_SUCCESS;
}
@@ -831,7 +833,7 @@ int AVI_ChunkRead( stream_t *s, avi_chunk_t *p_chk, avi_chunk_t *p_father )
if( p_chk->common.i_chunk_fourcc == VLC_FOURCC( 0, 0, 0, 0 ) )
{
msg_Warn( (vlc_object_t*)s, "found null fourcc chunk (corrupted file?)" );
- return VLC_EGENERIC;
+ return AVI_ZERO_FOURCC;
}
p_chk->common.p_father = p_father;
@@ -839,7 +841,7 @@ int AVI_ChunkRead( stream_t *s, avi_chunk_t *p_chk, avi_chunk_t *p_father )
if( AVI_Chunk_Function[i_index].AVI_ChunkRead_function )
{
int i_return = AVI_Chunk_Function[i_index].AVI_ChunkRead_function( s, p_chk );
- if ( i_return == AVI_STRD_ZERO_CHUNK )
+ if ( i_return == AVI_STRD_ZERO_CHUNK || i_return == AVI_ZERO_FOURCC )
{
if ( !p_father ) return VLC_EGENERIC;
return AVI_NextChunk( s, p_father );
diff --git a/modules/demux/avi/libavi.h b/modules/demux/avi/libavi.h
index 1ef830c..4ae9aa6 100644
--- a/modules/demux/avi/libavi.h
+++ b/modules/demux/avi/libavi.h
@@ -179,6 +179,7 @@ typedef struct avi_chunk_dmlh_s
} avi_chunk_dmlh_t;
#define AVI_STRD_ZERO_CHUNK 0xFF
+#define AVI_ZERO_FOURCC 0xFE
#define AVI_INDEX_OF_INDEXES 0x00
#define AVI_INDEX_OF_CHUNKS 0x01
More information about the vlc-commits
mailing list