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

m3u: rewrite probing (fix #9237)

parent 9066dd9c
...@@ -67,30 +67,44 @@ int Import_M3U( vlc_object_t *p_this ) ...@@ -67,30 +67,44 @@ int Import_M3U( vlc_object_t *p_this )
{ {
demux_t *p_demux = (demux_t *)p_this; demux_t *p_demux = (demux_t *)p_this;
const uint8_t *p_peek; const uint8_t *p_peek;
CHECK_PEEK( p_peek, 8 ); char *(*pf_dup) (const char *) = GuessEncoding;
char *(*pf_dup) (const char *); int offset = 0;
if( POKE( p_peek, "\xef\xbb\xbf", 3) )/* BOM at start */ if( stream_Peek( p_demux->s, &p_peek, 3 ) == 3
&& !memcmp( p_peek, "\xef\xbb\xbf", 3) )
{ {
pf_dup = CheckUnicode; /* UTF-8 */ pf_dup = CheckUnicode; /* UTF-8 Byte Order Mark */
stream_Seek( p_demux->s, 3 ); offset = 3;
} }
else
if( POKE( p_peek, "RTSPtext", 8 ) /* QuickTime */ if( demux_IsPathExtension( p_demux, ".m3u8" )
|| demux_IsPathExtension( p_demux, ".m3u8" )
|| demux_IsForced( p_demux, "m3u8" ) || demux_IsForced( p_demux, "m3u8" )
|| CheckContentType( p_demux->s, "application/vnd.apple.mpegurl" ) ) || CheckContentType( p_demux->s, "application/vnd.apple.mpegurl" ) )
pf_dup = CheckUnicode; /* UTF-8 */ pf_dup = CheckUnicode; /* UTF-8 file type */
else else
if( POKE( p_peek, "#EXTM3U", 7 ) if( demux_IsPathExtension( p_demux, ".m3u" )
|| demux_IsPathExtension( p_demux, ".m3u" )
|| demux_IsPathExtension( p_demux, ".vlc" ) || demux_IsPathExtension( p_demux, ".vlc" )
|| demux_IsForced( p_demux, "m3u" ) || demux_IsForced( p_demux, "m3u" )
|| ContainsURL( p_demux ) || ContainsURL( p_demux )
|| CheckContentType( p_demux->s, "audio/x-mpegurl") ) || CheckContentType( p_demux->s, "audio/x-mpegurl") )
pf_dup = GuessEncoding; ; /* Guess encoding */
else
{
if( stream_Peek( p_demux->s, &p_peek, 8 + offset ) < (8 + offset) )
return VLC_EGENERIC;
p_peek += offset;
if( !memcmp( p_peek, "RTSPtext", 8 ) ) /* QuickTime */
pf_dup = CheckUnicode; /* UTF-8 */
else
if( !memcmp( p_peek, "#EXTM3U", 7 ) )
; /* Guess encoding */
else else
return VLC_EGENERIC; return VLC_EGENERIC;
}
stream_Seek( p_demux->s, offset );
STANDARD_DEMUX_INIT_MSG( "found valid M3U playlist" ); STANDARD_DEMUX_INIT_MSG( "found valid M3U playlist" );
p_demux->p_sys->psz_prefix = FindPrefix( p_demux ); p_demux->p_sys->psz_prefix = FindPrefix( p_demux );
......
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