Commit e173fedd authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

ChunkFind: fix skipping very large chunks

(cherry picked from commit c8ef7621)
parent 877a82dd
......@@ -31,6 +31,7 @@
#include <vlc/aout.h>
#include <codecs.h>
#include <inttypes.h>
/*****************************************************************************
* Module descriptor
......@@ -380,17 +381,17 @@ static int ChunkFind( demux_t *p_demux, 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 ) )
{
......@@ -401,12 +402,12 @@ static int ChunkFind( demux_t *p_demux, 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;
}
}
}
static void FrameInfo_PCM( demux_t *p_demux, unsigned int *pi_size,
......
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