1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

motion_est: Limit motion vector search range to MAX_MV

Fixes out of array reads with videos exceeding MAX_MV

Found-by: Thierry Foucu
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2013-01-16 05:54:19 +01:00
parent 5c6283e5c3
commit bbe56bcd6b

View File

@ -516,6 +516,7 @@ static inline void get_limits(MpegEncContext *s, int x, int y)
{ {
MotionEstContext * const c= &s->me; MotionEstContext * const c= &s->me;
int range= c->avctx->me_range >> (1 + !!(c->flags&FLAG_QPEL)); int range= c->avctx->me_range >> (1 + !!(c->flags&FLAG_QPEL));
int max_range = MAX_MV >> (1 + !!(c->flags&FLAG_QPEL));
/* /*
if(c->avctx->me_range) c->range= c->avctx->me_range >> 1; if(c->avctx->me_range) c->range= c->avctx->me_range >> 1;
else c->range= 16; else c->range= 16;
@ -537,6 +538,8 @@ static inline void get_limits(MpegEncContext *s, int x, int y)
c->xmax = - x + s->mb_width *16 - 16; c->xmax = - x + s->mb_width *16 - 16;
c->ymax = - y + s->mb_height*16 - 16; c->ymax = - y + s->mb_height*16 - 16;
} }
if(!range || range > max_range)
range = max_range;
if(range){ if(range){
c->xmin = FFMAX(c->xmin,-range); c->xmin = FFMAX(c->xmin,-range);
c->xmax = FFMIN(c->xmax, range); c->xmax = FFMIN(c->xmax, range);