diff options
author | Clément Bœsch <u@pkh.me> | 2017-03-19 17:24:49 +0100 |
---|---|---|
committer | Clément Bœsch <u@pkh.me> | 2017-03-19 17:24:49 +0100 |
commit | 1080b7162f2c6d1e911b91e8097b352a7836b207 (patch) | |
tree | 4ed9bf3cfe01e557e02d72214d3503d2def2a273 | |
parent | 01e188762fc4f57cda26a09f63e2d4a4b4bd753e (diff) | |
parent | f5d46d332258dcd8ca623019ece1d5e5bb74142b (diff) | |
download | ffmpeg-1080b7162f2c6d1e911b91e8097b352a7836b207.tar.gz |
Merge commit 'f5d46d332258dcd8ca623019ece1d5e5bb74142b'
* commit 'f5d46d332258dcd8ca623019ece1d5e5bb74142b':
vmnc: check that subrectangles fit into their containing rectangles
See 6ba02602aa7fc7d38db582e75b8b093fb3c1608d
This merge keeps our condition against w-i and h-j instead of bw and bh.
One may be more correct than the other, but I'm keeping our behaviour
here for safety reasons.
The style and formatting is merged.
Merged-by: Clément Bœsch <u@pkh.me>
-rw-r--r-- | libavcodec/vmnc.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/libavcodec/vmnc.c b/libavcodec/vmnc.c index 49abb776f2..a756dab211 100644 --- a/libavcodec/vmnc.c +++ b/libavcodec/vmnc.c @@ -287,17 +287,24 @@ static int decode_hextile(VmncContext *c, uint8_t* dst, GetByteContext *gb, return AVERROR_INVALIDDATA; } for (k = 0; k < rects; k++) { + int rect_x, rect_y, rect_w, rect_h; if (color) fg = vmnc_get_pixel(gb, bpp, c->bigendian); xy = bytestream2_get_byte(gb); wh = bytestream2_get_byte(gb); - if ( (xy >> 4) + (wh >> 4) + 1 > w - i - || (xy & 0xF) + (wh & 0xF)+1 > h - j) { + + rect_x = xy >> 4; + rect_y = xy & 0xF; + rect_w = (wh >> 4) + 1; + rect_h = (wh & 0xF) + 1; + + if (rect_x + rect_w > w - i || rect_y + rect_h > h - j) { av_log(c->avctx, AV_LOG_ERROR, "Rectangle outside picture\n"); return AVERROR_INVALIDDATA; } - paint_rect(dst2, xy >> 4, xy & 0xF, - (wh>>4)+1, (wh & 0xF)+1, fg, bpp, stride); + + paint_rect(dst2, rect_x, rect_y, + rect_w, rect_h, fg, bpp, stride); } } } |