vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Aug 8 11:35:23 2018 +0200| [244951076e10dca80faeda6aa9fd50a4051888b6] | committer: Francois Cartegnie
demux: mpgv: improve probing need to reject mpeg4 sequences > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=244951076e10dca80faeda6aa9fd50a4051888b6 --- modules/demux/mpeg/mpgv.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/modules/demux/mpeg/mpgv.c b/modules/demux/mpeg/mpgv.c index 1ab835048d..8e0aea3547 100644 --- a/modules/demux/mpeg/mpgv.c +++ b/modules/demux/mpeg/mpgv.c @@ -78,6 +78,26 @@ static void Close( vlc_object_t * p_this ) free( p_sys ); } +static int CheckMPEGStartCode( const uint8_t *p_peek ) +{ + switch( p_peek[3] ) + { + case 0x00: + if( (p_peek[5] & 0x38) == 0x00 ) + return VLC_EGENERIC; + break; + case 0xB0: + case 0xB1: + case 0xB6: + return VLC_EGENERIC; + default: + if( p_peek[3] > 0xB9 ) + return VLC_EGENERIC; + break; + } + return VLC_SUCCESS; +} + /***************************************************************************** * Open: initializes demux structures *****************************************************************************/ @@ -91,7 +111,7 @@ static int Open( vlc_object_t * p_this ) es_format_t fmt; - if( vlc_stream_Peek( p_demux->s, &p_peek, 4 ) < 4 ) + if( vlc_stream_Peek( p_demux->s, &p_peek, 8 ) < 8 ) { msg_Dbg( p_demux, "cannot peek" ); return VLC_EGENERIC; @@ -107,12 +127,11 @@ static int Open( vlc_object_t * p_this ) msg_Err( p_demux, "this doesn't look like an MPEG ES stream, continuing" ); } - if( p_peek[3] > 0xb9 ) + if( CheckMPEGStartCode( p_peek ) != VLC_SUCCESS ) { if( !b_forced ) return VLC_EGENERIC; msg_Err( p_demux, "this seems to be a system stream (PS plug-in ?), but continuing" ); } - p_demux->pf_demux = Demux; p_demux->pf_control= Control; p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) ); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
