X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fcavsdec.c;h=800c1af4627b5144051f5947a17ee162459a6481;hb=6a3538bb233e5bdaf6448b1a897e5459fcc0c44f;hp=4d3d2d7c65ee9d8bbc757798dc4c796257a7200a;hpb=21f17bbfd4523ed769b5b0b569f5961914b2d6bc;p=ffmpeg diff --git a/libavcodec/cavsdec.c b/libavcodec/cavsdec.c index 4d3d2d7c65e..800c1af4627 100644 --- a/libavcodec/cavsdec.c +++ b/libavcodec/cavsdec.c @@ -684,7 +684,7 @@ static int decode_mb_i(AVSContext *h, int cbp_code) } h->cbp = cbp_tab[cbp_code][0]; if (h->cbp && !h->qp_fixed) - h->qp = (h->qp + get_se_golomb(gb)) & 63; //qp_delta + h->qp = (h->qp + (unsigned)get_se_golomb(gb)) & 63; //qp_delta /* luma intra prediction interleaved with residual decode/transform/add */ for (block = 0; block < 4; block++) { @@ -1031,6 +1031,10 @@ static int decode_pic(AVSContext *h) h->scale_den[1] = h->dist[1] ? 512/h->dist[1] : 0; if (h->cur.f->pict_type == AV_PICTURE_TYPE_B) { h->sym_factor = h->dist[0] * h->scale_den[1]; + if (FFABS(h->sym_factor) > 32768) { + av_log(h->avctx, AV_LOG_ERROR, "sym_factor %d too large\n", h->sym_factor); + return AVERROR_INVALIDDATA; + } } else { h->direct_den[0] = h->dist[0] ? 16384 / h->dist[0] : 0; h->direct_den[1] = h->dist[1] ? 16384 / h->dist[1] : 0;