Browse Source

avcodec/pngdec: Fix off by 1 size in decode_zbuf()

Fixes out of array access
Fixes: 444/fuzz-2-ffmpeg_VIDEO_AV_CODEC_ID_PNG_fuzzer

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/targets/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
(cherry picked from commit e371f031b9)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
tags/n2.8.11
Michael Niedermayer 9 years ago
parent
commit
1febd817b1
1 changed files with 3 additions and 3 deletions
  1. +3
    -3
      libavcodec/pngdec.c

+ 3
- 3
libavcodec/pngdec.c View File

@@ -435,13 +435,13 @@ static int decode_zbuf(AVBPrint *bp, const uint8_t *data,
av_bprint_init(bp, 0, -1); av_bprint_init(bp, 0, -1);


while (zstream.avail_in > 0) { while (zstream.avail_in > 0) {
av_bprint_get_buffer(bp, 1, &buf, &buf_size);
if (!buf_size) {
av_bprint_get_buffer(bp, 2, &buf, &buf_size);
if (buf_size < 2) {
ret = AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
goto fail; goto fail;
} }
zstream.next_out = buf; zstream.next_out = buf;
zstream.avail_out = buf_size;
zstream.avail_out = buf_size - 1;
ret = inflate(&zstream, Z_PARTIAL_FLUSH); ret = inflate(&zstream, Z_PARTIAL_FLUSH);
if (ret != Z_OK && ret != Z_STREAM_END) { if (ret != Z_OK && ret != Z_STREAM_END) {
ret = AVERROR_EXTERNAL; ret = AVERROR_EXTERNAL;


Loading…
Cancel
Save