vlc/vlc-2.2 | branch: master | Francois Cartegnie <[email protected]> | Fri Jan 15 22:42:19 2016 +0100| [d2294e93257cfbaf92aadcf084a936fb68fa5dca] | committer: Jean-Baptiste Kempf
stream_filter: httplive: fix nested playlist detection (fix #16395) Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=d2294e93257cfbaf92aadcf084a936fb68fa5dca --- modules/stream_filter/httplive.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c index ed88c7f..9be1738 100644 --- a/modules/stream_filter/httplive.c +++ b/modules/stream_filter/httplive.c @@ -967,7 +967,9 @@ static int hls_CompareStreams( const void* a, const void* b ) * ALLOW-CACHE, EXT-X-STREAM-INF, EXT-X-ENDLIST, EXT-X-DISCONTINUITY, * and EXT-X-VERSION. */ -static int parse_M3U8(stream_t *s, vlc_array_t *streams, uint8_t *buffer, const ssize_t len) + +static int parse_M3U8(stream_t *s, vlc_array_t *streams, uint8_t *buffer, + const ssize_t len, bool b_parent_is_meta) { stream_sys_t *p_sys = s->p_sys; uint8_t *p_read, *p_begin, *p_end; @@ -1018,6 +1020,8 @@ static int parse_M3U8(stream_t *s, vlc_array_t *streams, uint8_t *buffer, const /* Is it a meta index file ? */ bool b_meta = (strstr((const char *)buffer, "#EXT-X-STREAM-INF") == NULL) ? false : true; + if(b_meta && b_parent_is_meta) /* Nested meta playlists ?? */ + return VLC_EGENERIC; int err = VLC_SUCCESS; @@ -1034,7 +1038,7 @@ static int parse_M3U8(stream_t *s, vlc_array_t *streams, uint8_t *buffer, const p_begin = p_read; /* */ - if (strncmp(line, "#EXT-X-STREAM-INF", 17) == 0 && !p_sys->b_meta) + if (strncmp(line, "#EXT-X-STREAM-INF", 17) == 0) { p_sys->b_meta = true; char *uri = ReadLine(p_begin, &p_read, p_end - p_begin); @@ -1076,7 +1080,7 @@ static int parse_M3U8(stream_t *s, vlc_array_t *streams, uint8_t *buffer, const else { /* Parse HLS m3u8 content. */ - err = parse_M3U8(s, streams, buf, len); + err = parse_M3U8(s, streams, buf, len, b_meta); free(buf); } @@ -1366,7 +1370,7 @@ static int get_HTTPLiveMetaPlaylist(stream_t *s, vlc_array_t **streams) else { /* Parse HLS m3u8 content. */ - err = parse_M3U8(s, *streams, buf, len); + err = parse_M3U8(s, *streams, buf, len, false); free(buf); } } @@ -2088,7 +2092,7 @@ static int Open(vlc_object_t *p_this) ssize_t len = read_M3U8_from_stream(s->p_source, &buffer); if (len < 0) goto fail; - if (parse_M3U8(s, p_sys->hls_stream, buffer, len) != VLC_SUCCESS) + if (parse_M3U8(s, p_sys->hls_stream, buffer, len, false) != VLC_SUCCESS) { free(buffer); goto fail; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
