From: RĂ©mi Denis-Courmont Date: Sat, 28 Jun 2008 10:32:07 +0000 (+0300) Subject: ChunkFind: fix skipping very large chunks X-Git-Tag: 0.9.0-test1~88 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=c8ef76214a724af64c07fc20d88fcd4dc0459694;p=vlc ChunkFind: fix skipping very large chunks --- diff --git a/modules/demux/wav.c b/modules/demux/wav.c index 0613dd868d..0c271d3104 100644 --- a/modules/demux/wav.c +++ b/modules/demux/wav.c @@ -382,17 +382,17 @@ static int ChunkFind( demux_t *p_demux, const char *fcc, unsigned int *pi_size ) for( ;; ) { - int i_size; + uint32_t i_size; if( stream_Peek( p_demux->s, &p_peek, 8 ) < 8 ) { - msg_Err( p_demux, "cannot peek()" ); + msg_Err( p_demux, "cannot peek" ); return VLC_EGENERIC; } i_size = GetDWLE( p_peek + 4 ); - msg_Dbg( p_demux, "chunk: fcc=`%4.4s` size=%d", p_peek, i_size ); + msg_Dbg( p_demux, "chunk: fcc=`%4.4s` size=%"PRIu32, p_peek, i_size ); if( !memcmp( p_peek, fcc, 4 ) ) { @@ -403,11 +403,11 @@ static int ChunkFind( demux_t *p_demux, const char *fcc, unsigned int *pi_size ) return VLC_SUCCESS; } - i_size = __EVEN( i_size ) + 8; - if( stream_Read( p_demux->s, NULL, i_size ) != i_size ) - { + /* Skip chunk */ + if( stream_Read( p_demux->s, NULL, 8 ) != 8 + || stream_Read( p_demux->s, NULL, i_size ) != i_size + || ((i_size & 1) && stream_Read( p_demux->s, NULL, 1 ) != 1 )) return VLC_EGENERIC; - } } }