avcodec/dvbsubdec: check region dimensions

Fixes: 1408/clusterfuzz-testcase-minimized-6529985844084736
Fixes: integer overflow

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 0075d9eced)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Michael Niedermayer 2017-05-08 15:17:31 +02:00
parent 42ae8705fa
commit 493dc7bb12
1 changed files with 8 additions and 0 deletions

View File

@ -23,6 +23,7 @@
#include "get_bits.h"
#include "bytestream.h"
#include "libavutil/colorspace.h"
#include "libavutil/imgutils.h"
#include "libavutil/opt.h"
#define DVBSUB_PAGE_SEGMENT 0x10
@ -1138,6 +1139,7 @@ static void dvbsub_parse_region_segment(AVCodecContext *avctx,
DVBSubObject *object;
DVBSubObjectDisplay *display;
int fill;
int ret;
if (buf_size < 10)
return;
@ -1164,6 +1166,12 @@ static void dvbsub_parse_region_segment(AVCodecContext *avctx,
region->height = AV_RB16(buf);
buf += 2;
ret = av_image_check_size(region->width, region->height, 0, avctx);
if (ret < 0) {
region->width= region->height= 0;
return;
}
if (region->width * region->height != region->buf_size) {
av_free(region->pbuf);