vp8: change mv_{min,max}.{x,y} type to int
authorAndreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Mon, 8 Jun 2015 20:38:29 +0000 (22:38 +0200)
committerAndreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Mon, 8 Jun 2015 21:29:14 +0000 (23:29 +0200)
commit6fdbaa2b7fb56623ab2163f861952bc1408c39b3
tree0183f9daa9d81e08ff2e88f4d3f9be0858434c70
parent1382add59df149193620ca0714ceac0929208c88
vp8: change mv_{min,max}.{x,y} type to int

If one of the dimensions is larger than 8176, s->mb_width or
s->mb_height is larger than 511, leading to an int16_t overflow of
s->mv_max.{x,y}. This then causes av_clip to be called with amin > amax.

Changing the type to int avoids the overflow and has no negative
effect, because s->mv_max is only used in clamp_mv for clipping.
Since mv_max.{x,y} is positive and mv_min.{x,y} negative, av_clip can't
increase the absolute value. The input to av_clip is an int16_t, and
thus the output fits into int16_t as well.

For additional safety, s->mv_{min,max}.{x,y} are clipped to int16_t range
before use.

Reviewed-by: Ronald S. Bultje <rsbultje@gmail.com>
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
libavcodec/vp8.c
libavcodec/vp8.h