Opened 5 years ago

Last modified 7 weeks ago

#8030 new enhancement

IMGUTILS, failure handling big images

Reported by: gdgsdg123 Owned by:
Priority: wish Component: avutil
Version: git-master Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: no

Description

Summary of the bug:

[IMGUTILS @ 00000000002ff660] Picture size 9578x27586 is invalid
[png @ 00000000029885c0] [IMGUTILS @ 00000000002fee70] Picture size 27586x9578 is invalid
[png @ 00000000029885c0] Invalid image size

How to reproduce:

C:\>ffprobe x.png
ffprobe version N-94324-g806ac7da69 Copyright (c) 2007-2019 the FFmpeg developers
  built with gcc 9.1.1 (GCC) 20190716
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 30.100 / 56. 30.100
  libavcodec     58. 53.101 / 58. 53.101
  libavformat    58. 28.102 / 58. 28.102
  libavdevice    58.  7.100 / 58.  7.100
  libavfilter     7. 56.101 /  7. 56.101
  libswscale      5.  4.101 /  5.  4.101
  libswresample   3.  4.100 /  3.  4.100
  libpostproc    55.  4.100 / 55.  4.100
[IMGUTILS @ 00000000002ff660] Picture size 9578x27586 is invalid
[png @ 00000000029885c0] [IMGUTILS @ 00000000002fee70] Picture size 27586x9578 is invalid
[png @ 00000000029885c0] Invalid image size
[png_pipe @ 00000000003f3980] Stream #0: not enough frames to estimate rate; consider increasing probesize
[png_pipe @ 00000000003f3980] decoding for stream 0 failed
[png_pipe @ 00000000003f3980] Could not find codec parameters for stream 0 (Video: png, none(pc)): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, png_pipe, from 'x.png':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: png, none(pc), 25 tbr, 25 tbn, 25 tbc

Build from: https://zeranoe.com/builds/win64/static/ffmpeg-20190716-806ac7d-win64-static.zip

Also happens on images of similar size (e.g. 16256x16256). The content of the image doesn't seem to matter.

Attachments (1)

big.png (31.5 KB ) - added by Cigaes 5 years ago.
rawtoppm 16256 16256 /dev/zero | pnmtopng > big.png

Download all attachments as: .zip

Change History (8)

comment:1 by Carl Eugen Hoyos, 5 years ago

Component: undeterminedavutil
Keywords: IMGUTILS image size removed
Priority: normalwish

in reply to:  description ; comment:2 by Carl Eugen Hoyos, 5 years ago

Replying to gdgsdg123:

The content of the image doesn't seem to matter.

Of course not.
But don't you agree that for whoever is interested in this ticket, a file that shows your actual usecase would make things much easier?

in reply to:  2 comment:3 by gdgsdg123, 5 years ago

Replying to cehoyos:

Replying to gdgsdg123:

The content of the image doesn't seem to matter.

Of course not.
But don't you agree that for whoever is interested in this ticket, a file that shows your actual usecase would make things much easier?

I mean... it seems to occur with any image of a similar size.

comment:4 by Carl Eugen Hoyos, 5 years ago

So why don't you provide one? Just to make it more difficult to fix the issue or is there another reason?

comment:5 by Cigaes, 5 years ago

Do we really need to clutter the bugtracker with attached files that could be generated in a few seconds with:

rawtoppm 16256 16256 /dev/zero | pnmtopng > big.png

?

by Cigaes, 5 years ago

Attachment: big.png added

rawtoppm 16256 16256 /dev/zero | pnmtopng > big.png

comment:6 by Carl Eugen Hoyos, 5 years ago

Reproduced by developer: set

While the following may be a good idea, it does not help with this issue as the pix_fmt is not yet known when av_image_get_buffer_size() is called.

diff --git a/libavutil/imgutils.c b/libavutil/imgutils.c
index c733cb5cf5..f308422636 100644
--- a/libavutil/imgutils.c
+++ b/libavutil/imgutils.c
@@ -438,7 +438,7 @@ int av_image_get_buffer_size(enum AVPixelFormat pix_fmt,
     if (!desc)
         return AVERROR(EINVAL);
 
-    ret = av_image_check_size(width, height, 0, NULL);
+    ret = av_image_check_size2(width, height, INT64_MAX, pix_fmt, 0, NULL);
     if (ret < 0)
         return ret;
 

comment:7 by Benjamín de la Fuente Ranea, 7 weeks ago

This is working for me in Windows x64. In the function av_image_check_size2, just use this:

#if defined(_WIN64)
    #define MAX_MEM_SIZE INT64_MAX
#else
    #define MAX_MEM_SIZE INT_MAX
#endif
    if ((int)w<=0 || (int)h<=0 || stride >= INT_MAX || stride*(uint64_t)(h+128) >= MAX_MEM_SIZE) {
        av_log(&imgutils, AV_LOG_ERROR, "Picture size %ux%u is invalid\n", w, h);
        return AVERROR(EINVAL);
    }
Note: See TracTickets for help on using tickets.