[FFmpeg-trac] #9196(undetermined:new): adelay suffers integer overflow when delaying over 2^32-1 samples

FFmpeg trac at avcodec.org
Tue Apr 20 00:09:17 EEST 2021


#9196: adelay suffers integer overflow when delaying over 2^32-1 samples
-------------------------------------+-------------------------------------
             Reporter:  frumsdotxyz  |                    Owner:  (none)
                 Type:  defect       |                   Status:  new
             Priority:  normal       |                Component:
                                     |  undetermined
              Version:  unspecified  |               Resolution:
             Keywords:  avfilter,    |               Blocked By:
  adelay                             |
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
Description changed by frumsdotxyz:

Old description:

> I'm not sure how widely-scoped this issue is, but adelay seems to be
> managing sample counts for delays in unsigned 32-bit integers, and
> complains about negative input values when those counts would overflow -
> for instance, using a 50_000_000 millisecond delay on a video with a 48
> kHZ audio track, or (as in the sample below) a 100_000_000 millisecond
> delay on a 22.05 kHz audio file.
> Output for a sample transformation, and output for an ex input file
> itself are provided, but this problem was reproduced across several
> platforms/input audio files/versions, including 4.4.0-r0 (Alpine
> distribution).
>
> {{{
> ffmpeg started on 2021-04-19 at 14:00:35
> Report written to "ffmpeg-20210419-140035.log"
> Log level: 48
> Command line:
> ffmpeg -i zombo.mp3 -af "adelay=delays=100000000:all=1" -report out.mp3
> ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
>   built with Apple clang version 12.0.0 (clang-1200.0.32.29)
>   configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4 --enable-shared
> --enable-pthreads --enable-version3 --enable-avresample --cc=clang
> --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-
> gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-
> libmp3lame --enable-libopus --enable-librav1e --enable-librubberband
> --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-
> libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx
> --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2
> --enable-libxvid --enable-lzma --enable-libfontconfig --enable-
> libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb
> --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex
> --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack
> --disable-indev=jack --enable-videotoolbox
>   libavutil      56. 70.100 / 56. 70.100
>   libavcodec     58.134.100 / 58.134.100
>   libavformat    58. 76.100 / 58. 76.100
>   libavdevice    58. 13.100 / 58. 13.100
>   libavfilter     7.110.100 /  7.110.100
>   libavresample   4.  0.  0 /  4.  0.  0
>   libswscale      5.  9.100 /  5.  9.100
>   libswresample   3.  9.100 /  3.  9.100
>   libpostproc    55.  9.100 / 55.  9.100
> Splitting the commandline.
> Reading option '-i' ... matched as input url with argument 'zombo.mp3'.
> Reading option '-af' ... matched as option 'af' (set audio filters) with
> argument 'adelay=delays=100000000:all=1'.
> Reading option '-report' ... matched as option 'report' (generate a
> report) with argument '1'.
> Reading option 'out.mp3' ... matched as output url.
> Finished splitting the commandline.
> Parsing a group of options: global .
> Applying option report (generate a report) with argument 1.
> Successfully parsed a group of options.
> Parsing a group of options: input url zombo.mp3.
> Successfully parsed a group of options.
> Opening an input file: zombo.mp3.
> [NULL @ 0x7fe3f700e800] Opening 'zombo.mp3' for reading
> [file @ 0x7fe3f4420e00] Setting default whitelist 'file,crypto,data'
> [mp3 @ 0x7fe3f700e800] Format mp3 probed with size=2048 and score=51
> [mp3 @ 0x7fe3f700e800] Skipping 0 bytes of junk at 0.
> [mp3 @ 0x7fe3f700e800] Before avformat_find_stream_info() pos: 0 bytes
> read:65664 seeks:2 nb_streams:1
> [mp3 @ 0x7fe3f700e800] All info found
> [mp3 @ 0x7fe3f700e800] Estimating duration from bitrate, this may be
> inaccurate
> [mp3 @ 0x7fe3f700e800] After avformat_find_stream_info() pos: 4096 bytes
> read:65664 seeks:2 frames:50
> Input #0, mp3, from 'zombo.mp3':
>   Duration: 00:01:45.48, start: 0.000000, bitrate: 24 kb/s
>   Stream #0:0, 50, 1/14112000: Audio: mp3, 22050 Hz, mono, fltp, 24 kb/s
> Successfully opened the file.
> Parsing a group of options: output url out.mp3.
> Applying option af (set audio filters) with argument
> adelay=delays=100000000:all=1.
> Successfully parsed a group of options.
> Opening an output file: out.mp3.
> [file @ 0x7fe3f4707b00] Setting default whitelist 'file,crypto,data'
> Successfully opened the file.
> Stream mapping:
>   Stream #0:0 -> #0:0 (mp3 (mp3float) -> mp3 (libmp3lame))
> Press [q] to stop, [?] for help
> cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless
> if it occurs once at the start per stream)
> detected 8 logical cores
> [Parsed_adelay_0 @ 0x7fe3f5a04e80] Setting 'delays' to value '100000000'
> [Parsed_adelay_0 @ 0x7fe3f5a04e80] Setting 'all' to value '1'
> [graph_0_in_0_0 @ 0x7fe3f4424740] Setting 'time_base' to value '1/22050'
> [graph_0_in_0_0 @ 0x7fe3f4424740] Setting 'sample_rate' to value '22050'
> [graph_0_in_0_0 @ 0x7fe3f4424740] Setting 'sample_fmt' to value 'fltp'
> [graph_0_in_0_0 @ 0x7fe3f4424740] Setting 'channel_layout' to value '0x4'
> [graph_0_in_0_0 @ 0x7fe3f4424740] tb:1/22050 samplefmt:fltp
> samplerate:22050 chlayout:0x4
> [format_out_0_0 @ 0x7fe3f4424bc0] Setting 'sample_fmts' to value
> 's32p|fltp|s16p'
> [format_out_0_0 @ 0x7fe3f4424bc0] Setting 'sample_rates' to value
> '44100|48000|32000|22050|24000|16000|11025|12000|8000'
> [format_out_0_0 @ 0x7fe3f4424bc0] Setting 'channel_layouts' to value
> '0x4|0x3'
> [AVFilterGraph @ 0x7fe3f44245c0] query_formats: 4 queried, 9 merged, 0
> already done, 0 delayed
> [Parsed_adelay_0 @ 0x7fe3f5a04e80] Delay must be non negative number.
> [Parsed_adelay_0 @ 0x7fe3f5a04e80] Failed to configure input pad on
> Parsed_adelay_0
> Error reinitializing filters!
> Failed to inject frame into filter network: Invalid argument
> Error while processing the decoded data for stream #0:0
> [AVIOContext @ 0x7fe3f4422c00] Statistics: 0 seeks, 0 writeouts
> [AVIOContext @ 0x7fe3f4420f80] Statistics: 65664 bytes read, 2 seeks
> Conversion failed!
> }}}
>
> {{{
> ffmpeg started on 2021-04-19 at 14:00:50
> Report written to "ffmpeg-20210419-140050.log"
> Log level: 99
> Command line:
> ffmpeg -v 9 -loglevel 99 -i zombo.mp3 -report
> ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
>   built with Apple clang version 12.0.0 (clang-1200.0.32.29)
>   configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4 --enable-shared
> --enable-pthreads --enable-version3 --enable-avresample --cc=clang
> --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-
> gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-
> libmp3lame --enable-libopus --enable-librav1e --enable-librubberband
> --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-
> libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx
> --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2
> --enable-libxvid --enable-lzma --enable-libfontconfig --enable-
> libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb
> --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex
> --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack
> --disable-indev=jack --enable-videotoolbox
>   libavutil      56. 70.100 / 56. 70.100
>   libavcodec     58.134.100 / 58.134.100
>   libavformat    58. 76.100 / 58. 76.100
>   libavdevice    58. 13.100 / 58. 13.100
>   libavfilter     7.110.100 /  7.110.100
>   libavresample   4.  0.  0 /  4.  0.  0
>   libswscale      5.  9.100 /  5.  9.100
>   libswresample   3.  9.100 /  3.  9.100
>   libpostproc    55.  9.100 / 55.  9.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 'zombo.mp3'.
> Reading option '-report' ... matched as option 'report' (generate a
> report) with argument '1'.
> Finished splitting the commandline.
> Parsing a group of options: global .
> Applying option v (set logging level) with argument 9.
> Applying option loglevel (set logging level) with argument 99.
> Applying option report (generate a report) with argument 1.
> Successfully parsed a group of options.
> Parsing a group of options: input url zombo.mp3.
> Successfully parsed a group of options.
> Opening an input file: zombo.mp3.
> [NULL @ 0x7fda90008200] Opening 'zombo.mp3' for reading
> [file @ 0x7fda8d707800] Setting default whitelist 'file,crypto,data'
> Probing mp3 score:51 size:2048
> [mp3 @ 0x7fda90008200] Format mp3 probed with size=2048 and score=51
> [mp3 @ 0x7fda90008200] Skipping 0 bytes of junk at 0.
> [mp3 @ 0x7fda90008200] Before avformat_find_stream_info() pos: 0 bytes
> read:65664 seeks:2 nb_streams:1
> [mp3 @ 0x7fda90008200] All info found
> [mp3 @ 0x7fda90008200] Estimating duration from bitrate, this may be
> inaccurate
> [mp3 @ 0x7fda90008200] stream 0: start_time: 0 duration: 105.482
> [mp3 @ 0x7fda90008200] format: start_time: 0 duration: 105.482 (estimate
> from bit rate) bitrate=24 kb/s
> [mp3 @ 0x7fda90008200] After avformat_find_stream_info() pos: 4096 bytes
> read:65664 seeks:2 frames:50
> Input #0, mp3, from 'zombo.mp3':
>   Duration: 00:01:45.48, start: 0.000000, bitrate: 24 kb/s
>   Stream #0:0, 50, 1/14112000: Audio: mp3, 22050 Hz, mono, fltp, 24 kb/s
> Successfully opened the file.
> At least one output file must be specified
> [AVIOContext @ 0x7fda8eb040c0] Statistics: 65664 bytes read, 2 seeks
> }}}

New description:

 I'm not sure how widely-scoped this issue is, but adelay seems to be
 managing sample counts for delays in unsigned 32-bit integers, and
 complains about negative input values when those counts would overflow -
 for instance, using a 50_000_000 millisecond delay on a video with a 48
 kHZ audio track, or (as in the sample below) a 100_000_000 millisecond
 delay on a 22.05 kHz audio file.
 Output for a sample transformation, and output for an ex input file itself
 are provided, but this problem was reproduced across several
 platforms/input audio files/versions, including 4.4.0-r0 (Alpine
 distribution).

 This was first discovered when processing and time-aligning the audio
 tracks of long video recordings with multiple slices made over the course
 of a day, which is where the original ~50k second figure (around 14 hours)
 was discovered.

 {{{
 ffmpeg started on 2021-04-19 at 14:00:35
 Report written to "ffmpeg-20210419-140035.log"
 Log level: 48
 Command line:
 ffmpeg -i zombo.mp3 -af "adelay=delays=100000000:all=1" -report out.mp3
 ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
   built with Apple clang version 12.0.0 (clang-1200.0.32.29)
   configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4 --enable-shared
 --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-
 cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl
 --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame
 --enable-libopus --enable-librav1e --enable-librubberband --enable-
 libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora
 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp
 --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid
 --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r
 --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb
 --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq
 --enable-libzimg --disable-libjack --disable-indev=jack --enable-
 videotoolbox
   libavutil      56. 70.100 / 56. 70.100
   libavcodec     58.134.100 / 58.134.100
   libavformat    58. 76.100 / 58. 76.100
   libavdevice    58. 13.100 / 58. 13.100
   libavfilter     7.110.100 /  7.110.100
   libavresample   4.  0.  0 /  4.  0.  0
   libswscale      5.  9.100 /  5.  9.100
   libswresample   3.  9.100 /  3.  9.100
   libpostproc    55.  9.100 / 55.  9.100
 Splitting the commandline.
 Reading option '-i' ... matched as input url with argument 'zombo.mp3'.
 Reading option '-af' ... matched as option 'af' (set audio filters) with
 argument 'adelay=delays=100000000:all=1'.
 Reading option '-report' ... matched as option 'report' (generate a
 report) with argument '1'.
 Reading option 'out.mp3' ... matched as output url.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option report (generate a report) with argument 1.
 Successfully parsed a group of options.
 Parsing a group of options: input url zombo.mp3.
 Successfully parsed a group of options.
 Opening an input file: zombo.mp3.
 [NULL @ 0x7fe3f700e800] Opening 'zombo.mp3' for reading
 [file @ 0x7fe3f4420e00] Setting default whitelist 'file,crypto,data'
 [mp3 @ 0x7fe3f700e800] Format mp3 probed with size=2048 and score=51
 [mp3 @ 0x7fe3f700e800] Skipping 0 bytes of junk at 0.
 [mp3 @ 0x7fe3f700e800] Before avformat_find_stream_info() pos: 0 bytes
 read:65664 seeks:2 nb_streams:1
 [mp3 @ 0x7fe3f700e800] All info found
 [mp3 @ 0x7fe3f700e800] Estimating duration from bitrate, this may be
 inaccurate
 [mp3 @ 0x7fe3f700e800] After avformat_find_stream_info() pos: 4096 bytes
 read:65664 seeks:2 frames:50
 Input #0, mp3, from 'zombo.mp3':
   Duration: 00:01:45.48, start: 0.000000, bitrate: 24 kb/s
   Stream #0:0, 50, 1/14112000: Audio: mp3, 22050 Hz, mono, fltp, 24 kb/s
 Successfully opened the file.
 Parsing a group of options: output url out.mp3.
 Applying option af (set audio filters) with argument
 adelay=delays=100000000:all=1.
 Successfully parsed a group of options.
 Opening an output file: out.mp3.
 [file @ 0x7fe3f4707b00] Setting default whitelist 'file,crypto,data'
 Successfully opened the file.
 Stream mapping:
   Stream #0:0 -> #0:0 (mp3 (mp3float) -> mp3 (libmp3lame))
 Press [q] to stop, [?] for help
 cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless
 if it occurs once at the start per stream)
 detected 8 logical cores
 [Parsed_adelay_0 @ 0x7fe3f5a04e80] Setting 'delays' to value '100000000'
 [Parsed_adelay_0 @ 0x7fe3f5a04e80] Setting 'all' to value '1'
 [graph_0_in_0_0 @ 0x7fe3f4424740] Setting 'time_base' to value '1/22050'
 [graph_0_in_0_0 @ 0x7fe3f4424740] Setting 'sample_rate' to value '22050'
 [graph_0_in_0_0 @ 0x7fe3f4424740] Setting 'sample_fmt' to value 'fltp'
 [graph_0_in_0_0 @ 0x7fe3f4424740] Setting 'channel_layout' to value '0x4'
 [graph_0_in_0_0 @ 0x7fe3f4424740] tb:1/22050 samplefmt:fltp
 samplerate:22050 chlayout:0x4
 [format_out_0_0 @ 0x7fe3f4424bc0] Setting 'sample_fmts' to value
 's32p|fltp|s16p'
 [format_out_0_0 @ 0x7fe3f4424bc0] Setting 'sample_rates' to value
 '44100|48000|32000|22050|24000|16000|11025|12000|8000'
 [format_out_0_0 @ 0x7fe3f4424bc0] Setting 'channel_layouts' to value
 '0x4|0x3'
 [AVFilterGraph @ 0x7fe3f44245c0] query_formats: 4 queried, 9 merged, 0
 already done, 0 delayed
 [Parsed_adelay_0 @ 0x7fe3f5a04e80] Delay must be non negative number.
 [Parsed_adelay_0 @ 0x7fe3f5a04e80] Failed to configure input pad on
 Parsed_adelay_0
 Error reinitializing filters!
 Failed to inject frame into filter network: Invalid argument
 Error while processing the decoded data for stream #0:0
 [AVIOContext @ 0x7fe3f4422c00] Statistics: 0 seeks, 0 writeouts
 [AVIOContext @ 0x7fe3f4420f80] Statistics: 65664 bytes read, 2 seeks
 Conversion failed!
 }}}

 {{{
 ffmpeg started on 2021-04-19 at 14:00:50
 Report written to "ffmpeg-20210419-140050.log"
 Log level: 99
 Command line:
 ffmpeg -v 9 -loglevel 99 -i zombo.mp3 -report
 ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
   built with Apple clang version 12.0.0 (clang-1200.0.32.29)
   configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4 --enable-shared
 --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-
 cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl
 --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame
 --enable-libopus --enable-librav1e --enable-librubberband --enable-
 libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora
 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp
 --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid
 --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r
 --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb
 --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq
 --enable-libzimg --disable-libjack --disable-indev=jack --enable-
 videotoolbox
   libavutil      56. 70.100 / 56. 70.100
   libavcodec     58.134.100 / 58.134.100
   libavformat    58. 76.100 / 58. 76.100
   libavdevice    58. 13.100 / 58. 13.100
   libavfilter     7.110.100 /  7.110.100
   libavresample   4.  0.  0 /  4.  0.  0
   libswscale      5.  9.100 /  5.  9.100
   libswresample   3.  9.100 /  3.  9.100
   libpostproc    55.  9.100 / 55.  9.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 'zombo.mp3'.
 Reading option '-report' ... matched as option 'report' (generate a
 report) with argument '1'.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option v (set logging level) with argument 9.
 Applying option loglevel (set logging level) with argument 99.
 Applying option report (generate a report) with argument 1.
 Successfully parsed a group of options.
 Parsing a group of options: input url zombo.mp3.
 Successfully parsed a group of options.
 Opening an input file: zombo.mp3.
 [NULL @ 0x7fda90008200] Opening 'zombo.mp3' for reading
 [file @ 0x7fda8d707800] Setting default whitelist 'file,crypto,data'
 Probing mp3 score:51 size:2048
 [mp3 @ 0x7fda90008200] Format mp3 probed with size=2048 and score=51
 [mp3 @ 0x7fda90008200] Skipping 0 bytes of junk at 0.
 [mp3 @ 0x7fda90008200] Before avformat_find_stream_info() pos: 0 bytes
 read:65664 seeks:2 nb_streams:1
 [mp3 @ 0x7fda90008200] All info found
 [mp3 @ 0x7fda90008200] Estimating duration from bitrate, this may be
 inaccurate
 [mp3 @ 0x7fda90008200] stream 0: start_time: 0 duration: 105.482
 [mp3 @ 0x7fda90008200] format: start_time: 0 duration: 105.482 (estimate
 from bit rate) bitrate=24 kb/s
 [mp3 @ 0x7fda90008200] After avformat_find_stream_info() pos: 4096 bytes
 read:65664 seeks:2 frames:50
 Input #0, mp3, from 'zombo.mp3':
   Duration: 00:01:45.48, start: 0.000000, bitrate: 24 kb/s
   Stream #0:0, 50, 1/14112000: Audio: mp3, 22050 Hz, mono, fltp, 24 kb/s
 Successfully opened the file.
 At least one output file must be specified
 [AVIOContext @ 0x7fda8eb040c0] Statistics: 65664 bytes read, 2 seeks
 }}}

--
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/9196#comment:1>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list