[vlc-commits] m3u: rewrite probing (fix #9237)
Rémi Denis-Courmont
git at videolan.org
Thu Aug 22 19:02:50 CEST 2013
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Aug 22 19:54:46 2013 +0300| [0106a8b6d782930e821598a76f950dceaa519fbf] | committer: Rémi Denis-Courmont
m3u: rewrite probing (fix #9237)
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0106a8b6d782930e821598a76f950dceaa519fbf
---
modules/demux/playlist/m3u.c | 40 +++++++++++++++++++++++++++-------------
1 file changed, 27 insertions(+), 13 deletions(-)
diff --git a/modules/demux/playlist/m3u.c b/modules/demux/playlist/m3u.c
index a942005..11e5534 100644
--- a/modules/demux/playlist/m3u.c
+++ b/modules/demux/playlist/m3u.c
@@ -67,30 +67,44 @@ int Import_M3U( vlc_object_t *p_this )
{
demux_t *p_demux = (demux_t *)p_this;
const uint8_t *p_peek;
- CHECK_PEEK( p_peek, 8 );
- char *(*pf_dup) (const char *);
+ char *(*pf_dup) (const char *) = GuessEncoding;
+ 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 */
- stream_Seek( p_demux->s, 3 );
+ pf_dup = CheckUnicode; /* UTF-8 Byte Order Mark */
+ offset = 3;
}
- else
- if( POKE( p_peek, "RTSPtext", 8 ) /* QuickTime */
- || demux_IsPathExtension( p_demux, ".m3u8" )
+
+ if( demux_IsPathExtension( p_demux, ".m3u8" )
|| demux_IsForced( p_demux, "m3u8" )
|| CheckContentType( p_demux->s, "application/vnd.apple.mpegurl" ) )
- pf_dup = CheckUnicode; /* UTF-8 */
+ pf_dup = CheckUnicode; /* UTF-8 file type */
else
- if( POKE( p_peek, "#EXTM3U", 7 )
- || demux_IsPathExtension( p_demux, ".m3u" )
+ if( demux_IsPathExtension( p_demux, ".m3u" )
|| demux_IsPathExtension( p_demux, ".vlc" )
|| demux_IsForced( p_demux, "m3u" )
|| ContainsURL( p_demux )
|| CheckContentType( p_demux->s, "audio/x-mpegurl") )
- pf_dup = GuessEncoding;
+ ; /* Guess encoding */
else
- return VLC_EGENERIC;
+ {
+ 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
+ return VLC_EGENERIC;
+ }
+
+ stream_Seek( p_demux->s, offset );
STANDARD_DEMUX_INIT_MSG( "found valid M3U playlist" );
p_demux->p_sys->psz_prefix = FindPrefix( p_demux );
More information about the vlc-commits
mailing list