#include "bytestream.h"
#include "internal.h"
#include "libavutil/colorspace.h"
+#include "libavutil/imgutils.h"
#include "libavutil/opt.h"
#define DVBSUB_PAGE_SEGMENT 0x10
return AVERROR_INVALIDDATA;
}
- if (depth & 0x80)
+ if (depth & 0x80 && entry_id < 4)
clut->clut4[entry_id] = RGBA(r,g,b,255 - alpha);
- else if (depth & 0x40)
+ else if (depth & 0x40 && entry_id < 16)
clut->clut16[entry_id] = RGBA(r,g,b,255 - alpha);
else if (depth & 0x20)
clut->clut256[entry_id] = RGBA(r,g,b,255 - alpha);
DVBSubObject *object;
DVBSubObjectDisplay *display;
int fill;
+ int ret;
if (buf_size < 10)
return AVERROR_INVALIDDATA;
region->height = AV_RB16(buf);
buf += 2;
+ ret = av_image_check_size2(region->width, region->height, avctx->max_pixels, AV_PIX_FMT_PAL8, 0, avctx);
+ if (ret >= 0 && region->width * region->height * 2 > 320 * 1024 * 8) {
+ ret = AVERROR_INVALIDDATA;
+ av_log(avctx, AV_LOG_ERROR, "Pixel buffer memory constraint violated\n");
+ }
+ if (ret < 0) {
+ region->width= region->height= 0;
+ return ret;
+ }
+
if (region->width * region->height != region->buf_size) {
av_free(region->pbuf);