return VLC_FOURCC( p_buff[0], p_buff[1], p_buff[2], p_buff[3] );
}
-#define AVI_ChunkFree( a, b ) _AVI_ChunkFree( (a), (avi_chunk_t*)(b) )
-void _AVI_ChunkFree( stream_t *, avi_chunk_t *p_chk );
-
/****************************************************************************
*
* Basics functions to manipulates chunks
#define AVI_READCHUNK_ENTER \
int64_t i_read = __EVEN(p_chk->common.i_chunk_size ) + 8; \
+ if( i_read > 100000000 ) \
+ { \
+ msg_Err( s, "Big chunk ignored" ); \
+ return VLC_EGENERIC; \
+ } \
uint8_t *p_read, *p_buff; \
if( !( p_read = p_buff = malloc(i_read ) ) ) \
{ \
}
static void AVI_ChunkDumpDebug_level( vlc_object_t *p_obj,
- avi_chunk_t *p_chk, int i_level )
+ avi_chunk_t *p_chk, unsigned i_level )
{
- char str[1024];
- int i;
+ unsigned i;
avi_chunk_t *p_child;
+ char str[512];
+ if( i_level >= (sizeof(str) - 1)/5 )
+ return;
+
memset( str, ' ', sizeof( str ) );
for( i = 1; i < i_level; i++ )
{
p_chk->common.i_chunk_fourcc == AVIFOURCC_ON2 ||
p_chk->common.i_chunk_fourcc == AVIFOURCC_LIST )
{
- sprintf( str + i_level * 5,
+ snprintf( &str[i_level * 5], sizeof(str) - 5*i_level,
"%c %4.4s-%4.4s size:%"PRIu64" pos:%"PRIu64,
i_level ? '+' : '*',
(char*)&p_chk->common.i_chunk_fourcc,
}
else
{
- sprintf( str + i_level * 5,
+ snprintf( &str[i_level * 5], sizeof(str) - 5*i_level,
"+ %4.4s size:%"PRIu64" pos:%"PRIu64,
(char*)&p_chk->common.i_chunk_fourcc,
p_chk->common.i_chunk_size,