[FFmpeg-trac] #8687(avformat:new): HLS playlist with segment URL without path part causes SIGSEGV
FFmpeg
trac at avcodec.org
Wed May 27 13:43:37 EEST 2020
#8687: HLS playlist with segment URL without path part causes SIGSEGV
----------------------------------+--------------------------------------
Reporter: wader | Type: defect
Status: new | Priority: normal
Component: avformat | Version: git-master
Keywords: hls | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
----------------------------------+--------------------------------------
Summary of the bug:
HLS playlist with segment URL without path part causes SIGSEGV
ffmpeg version: master at b5aee6086b717b83bce8f6be4324fabaddec6209
(2020-05-27)
How to reproduce:
{{{
/build # cat test.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:1
#EXTINF:11.811,
http://a
/build # gdb --args ./ffprobe_g -i test.m3u8
GNU gdb (GDB) 8.3.1
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-alpine-linux-musl".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./ffprobe_g...
(gdb) r
Starting program: /build/ffprobe_g -i test.m3u8
warning: Error disabling address space randomization: Operation not
permitted
ffprobe version N-97964-gb5aee6086b Copyright (c) 2007-2020 the FFmpeg
developers
built with gcc 9.2.0 (Alpine 9.2.0)
configuration: --enable-debug --disable-optimizations
libavutil 56. 49.100 / 56. 49.100
libavcodec 58. 88.100 / 58. 88.100
libavformat 58. 43.100 / 58. 43.100
libavdevice 58. 9.103 / 58. 9.103
libavfilter 7. 83.100 / 7. 83.100
libswscale 5. 6.101 / 5. 6.101
libswresample 3. 6.100 / 3. 6.100
[hls @ 0x55b973e0c440] Skip ('#EXT-X-VERSION:3')
Program received signal SIGSEGV, Segmentation fault.
0x000055b972e475af in av_stristart (str=0x0, pfx=0x55b972f43388 "/",
ptr=0x0) at src/libavutil/avstring.c:47
47 while (*pfx && av_toupper((unsigned)*pfx) ==
av_toupper((unsigned)*str)) {
(gdb) l
42 return !*pfx;
43 }
44
45 int av_stristart(const char *str, const char *pfx, const char
**ptr)
46 {
47 while (*pfx && av_toupper((unsigned)*pfx) ==
av_toupper((unsigned)*str)) {
48 pfx++;
49 str++;
50 }
51 if (!*pfx && ptr)
(gdb) bt
#0 0x000055b972e475af in av_stristart (str=0x0, pfx=0x55b972f43388 "/",
ptr=0x0) at src/libavutil/avstring.c:47
#1 0x000055b971f17ab5 in trim_double_dot_url (buf=0x7ffc983db350
"\354\003", rel=0x7ffc983da350 "http://a", size=4096) at
src/libavformat/url.c:107
#2 0x000055b971f17ddd in ff_make_absolute_url (buf=0x7ffc983db350
"\354\003", size=4096, base=0x55b973e0cbc0 "/Users/wader/src/ffmpeg-
master/test.m3u8",
rel=0x7ffc983da350 "http://a") at src/libavformat/url.c:153
#3 0x000055b971ddd4b4 in parse_playlist (c=0x55b973e0cf00,
url=0x55b973e0cbc0 "/Users/wader/src/ffmpeg-master/test.m3u8",
pls=0x55b9757c9a00,
in=0x7f3400745380) at src/libavformat/hls.c:908
#4 0x000055b971de0112 in hls_read_header (s=0x55b973e0c440) at
src/libavformat/hls.c:1830
#5 0x000055b971f19db8 in avformat_open_input (ps=0x7ffc983dc508,
filename=0x7ffc983ddf02 "/Users/wader/src/ffmpeg-master/test.m3u8",
fmt=0x0,
options=0x55b973b02c08 <format_opts>) at src/libavformat/utils.c:627
#6 0x000055b9719ed16f in open_input_file (ifile=0x7ffc983dc590,
filename=0x7ffc983ddf02 "/Users/wader/src/ffmpeg-master/test.m3u8",
print_filename=0x0)
at src/fftools/ffprobe.c:2870
#7 0x000055b9719ed789 in probe_file (wctx=0x55b9757c7040,
filename=0x7ffc983ddf02 "/Users/wader/src/ffmpeg-master/test.m3u8",
print_filename=0x0)
at src/fftools/ffprobe.c:3003
#8 0x000055b9719efbc1 in main (argc=3, argv=0x7ffc983dc658) at
src/fftools/ffprobe.c:3722
(gdb) p pfx
$1 = 0x561bbf32c388 "/"
(gdb) p str
$2 = 0x0
(gdb) f 1
#1 0x0000561bbe300ab5 in trim_double_dot_url (buf=0x7ffedc617020
"\354\003", rel=0x7ffedc616020 "http://a", size=4096) at
src/libavformat/url.c:107
107 if (!av_stristart(p, "/", NULL) && root != rel)
(gdb) p p
$3 = 0x0
(gdb) f 2
#2 0x0000561bbe300ddd in ff_make_absolute_url (buf=0x7ffedc617020
"\354\003", size=4096, base=0x561bc01f5bc0 "/Users/wader/src/ffmpeg-
master/test.m3u8",
rel=0x7ffedc616020 "http://a") at src/libavformat/url.c:153
153 trim_double_dot_url(buf, rel, size);
(gdb) p buf
$4 = 0x7ffedc617020 "\354\003"
(gdb) p rel
$5 = 0x7ffedc616020 "http://a"
}}}
If i add a slash to the segment URL i get valid error:
{{{
/build # cat test.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:1
#EXTINF:11.811,
http://a/
/build # gdb --args ./ffprobe_g -i test.m3u8
GNU gdb (GDB) 8.3.1
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-alpine-linux-musl".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./ffprobe_g...
r
(gdb) r
Starting program: /build/ffprobe_g -i /Users/wader/src/ffmpeg-
master/test.m3u8
warning: Error disabling address space randomization: Operation not
permitted
ffprobe version N-97964-gb5aee6086b Copyright (c) 2007-2020 the FFmpeg
developers
built with gcc 9.2.0 (Alpine 9.2.0)
configuration: --enable-debug --disable-optimizations
libavutil 56. 49.100 / 56. 49.100
libavcodec 58. 88.100 / 58. 88.100
libavformat 58. 43.100 / 58. 43.100
libavdevice 58. 9.103 / 58. 9.103
libavfilter 7. 83.100 / 7. 83.100
libswscale 5. 6.101 / 5. 6.101
libswresample 3. 6.100 / 3. 6.100
[hls @ 0x55dc945e2440] Skip ('#EXT-X-VERSION:3')
[hls @ 0x55dc945e2440] Opening 'http://a/' for reading
[http @ 0x7f60466d0cc0] Protocol 'http' not on whitelist
'file,crypto,data'!
[hls @ 0x55dc945e2440] Failed to open segment 0 of playlist 0
[hls @ 0x55dc945e2440] Skip ('#EXT-X-VERSION:3')
Last message repeated 80 times
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/8687>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list