Opened 3 years ago
Last modified 3 years ago
#9580 new defect
WebVTT decoder processes an invalid input file without complaining, producing a truncated output
Reported by: | Lise | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | avcodec |
Version: | git-master | Keywords: | webvtt |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
If there is an error in the input WebVTT file, ffmpeg just processes the file until the error, without any warnings. The result is a truncated output file.
How to reproduce:
Input file (the line with 'why?' makes the file an invalid webvtt I guess):
WEBVTT 00:01.000 --> 00:04.000 - Never drink liquid nitrogen. why? 00:05.000 --> 00:09.000 - It will perforate your stomach. - You could die.
Command and console output:
ffmpeg -v 9 -loglevel 99 -i invalid.vtt -c copy truncated.vtt ffmpeg version N-105057-g68d0a7e446-20220103 Copyright (c) 2000-2022 the FFmpeg developers built with gcc 11.2.0 (crosstool-NG 1.24.0.498_5075e1f) configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libpulse --enable-libvmaf --enable-libxcb --enable-xlib --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-mbedtls --enable-librist --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags=-pie --extra-libs='-ldl -lgomp' --extra-version=20220103 libavutil 57. 13.100 / 57. 13.100 libavcodec 59. 15.102 / 59. 15.102 libavformat 59. 12.100 / 59. 12.100 libavdevice 59. 1.100 / 59. 1.100 libavfilter 8. 21.100 / 8. 21.100 libswscale 6. 1.102 / 6. 1.102 libswresample 4. 0.100 / 4. 0.100 libpostproc 56. 0.100 / 56. 0.100 Splitting the commandline. Reading option '-v' ... matched as option 'v' (set logging level) with argument '9'. Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument '99'. Reading option '-i' ... matched as input url with argument 'invalid.vtt'. Reading option '-c' ... matched as option 'c' (codec name) with argument 'copy'. Reading option 'truncated.vtt' ... matched as output url. Finished splitting the commandline. Parsing a group of options: global . Applying option v (set logging level) with argument 9. Successfully parsed a group of options. Parsing a group of options: input url invalid.vtt. Successfully parsed a group of options. Opening an input file: invalid.vtt. [NULL @ 0x55bc88dfa8c0] Opening 'invalid.vtt' for reading [file @ 0x55bc88dfb1c0] Setting default whitelist 'file,crypto,data' Probing webvtt score:100 size:145 [webvtt @ 0x55bc88dfa8c0] Format webvtt probed with size=2048 and score=100 [webvtt @ 0x55bc88dfa8c0] Before avformat_find_stream_info() pos: 70 bytes read:145 seeks:0 nb_streams:1 [webvtt @ 0x55bc88dfa8c0] All info found [webvtt @ 0x55bc88dfa8c0] stream 0: start_time: NOPTS duration: NOPTS [webvtt @ 0x55bc88dfa8c0] format: start_time: NOPTS duration: NOPTS (estimate from bit rate) bitrate=0 kb/s [webvtt @ 0x55bc88dfa8c0] After avformat_find_stream_info() pos: 70 bytes read:145 seeks:0 frames:0 Input #0, webvtt, from 'invalid.vtt': Duration: N/A, bitrate: N/A Stream #0:0, 0, 1/1000: Subtitle: webvtt Successfully opened the file. Parsing a group of options: output url truncated.vtt. Applying option c (codec name) with argument copy. Successfully parsed a group of options. Opening an output file: truncated.vtt. [file @ 0x55bc88e007c0] Setting default whitelist 'file,crypto,data' Successfully opened the file. Output #0, webvtt, to 'truncated.vtt': Metadata: encoder : Lavf59.12.100 Stream #0:0, 0, 1/1000: Subtitle: webvtt Stream mapping: Stream #0:0 -> #0:0 (copy) Press [q] to stop, [?] for help cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream) No more output streams to write to, finishing.5kbits/s speed=N/A size= 0kB time=00:00:01.00 bitrate= 0.5kbits/s speed=6.33e+03x video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 110.000000% Input file #0 (invalid.vtt): Input stream #0:0 (subtitle): 1 packets read (30 bytes); Total: 1 packets (30 bytes) demuxed Output file #0 (truncated.vtt): Output stream #0:0 (subtitle): 1 packets muxed (30 bytes); Total: 1 packets (30 bytes) muxed [AVIOContext @ 0x55bc88e00a40] Statistics: 63 bytes written, 0 seeks, 1 writeouts 0 frames successfully decoded, 0 decoding errors [AVIOContext @ 0x55bc88e03580] Statistics: 145 bytes read, 0 seeks
Output file:
WEBVTT 00:01.000 --> 00:04.000 - Never drink liquid nitrogen.
So we can see in the output that only 70 of 145 bytes were processed, that's the file until the error:
Before avformat_find_stream_info() pos: 70 bytes read:145
Maybe that is how it's supposed to work, but a warning or error message would be helpful here.
Change History (1)
comment:1 by , 3 years ago
Summary: | WebVTT decoder processes an invalid input file without complaining, producing a tuncated output → WebVTT decoder processes an invalid input file without complaining, producing a truncated output |
---|
Note:
See TracTickets
for help on using tickets.