Commit 9759d2b8 authored by Michael Niedermayer's avatar Michael Niedermayer

indeo4: check motion vetors.

Fixes out of heap array read.

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent afc0cc22
...@@ -462,7 +462,7 @@ static int decode_mb_info(IVI4DecContext *ctx, IVIBandDesc *band, ...@@ -462,7 +462,7 @@ static int decode_mb_info(IVI4DecContext *ctx, IVIBandDesc *band,
IVITile *tile, AVCodecContext *avctx) IVITile *tile, AVCodecContext *avctx)
{ {
int x, y, mv_x, mv_y, mv_delta, offs, mb_offset, blks_per_mb, int x, y, mv_x, mv_y, mv_delta, offs, mb_offset, blks_per_mb,
mv_scale, mb_type_bits; mv_scale, mb_type_bits, s;
IVIMbInfo *mb, *ref_mb; IVIMbInfo *mb, *ref_mb;
int row_offset = band->mb_size * band->pitch; int row_offset = band->mb_size * band->pitch;
...@@ -558,6 +558,15 @@ static int decode_mb_info(IVI4DecContext *ctx, IVIBandDesc *band, ...@@ -558,6 +558,15 @@ static int decode_mb_info(IVI4DecContext *ctx, IVIBandDesc *band,
} }
} }
s= band->is_halfpel;
if (mb->type)
if ( x + (mv_x >>s) + (y+ (mv_y >>s))*band->pitch < 0 ||
x + ((mv_x+s)>>s) + band->mb_size - 1
+ (y+band->mb_size - 1 +((mv_y+s)>>s))*band->pitch > band->height*band->pitch -1) {
av_log(avctx, AV_LOG_ERROR, "motion vector %d %d outside reference\n", x*s + mv_x, y*s + mv_y);
return AVERROR_INVALIDDATA;
}
mb++; mb++;
if (ref_mb) if (ref_mb)
ref_mb++; ref_mb++;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment