Commit 8258e363 authored by Michael Niedermayer's avatar Michael Niedermayer

avcodec/mpeg4videodec: Fix undefined shifts in mpeg4_decode_sprite_trajectory()

Fixes: part of 670190.ogg
Found-by: 's avatarMatt Wolenetz <wolenetz@google.com>
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent ee2a6f5d
...@@ -315,13 +315,13 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g ...@@ -315,13 +315,13 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g
min_ab = FFMIN(alpha, beta); min_ab = FFMIN(alpha, beta);
w3 = w2 >> min_ab; w3 = w2 >> min_ab;
h3 = h2 >> min_ab; h3 = h2 >> min_ab;
s->sprite_offset[0][0] = (sprite_ref[0][0] << (alpha + beta + rho - min_ab)) + s->sprite_offset[0][0] = (sprite_ref[0][0] * (1<<(alpha + beta + rho - min_ab))) +
(-r * sprite_ref[0][0] + virtual_ref[0][0]) * (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
h3 * (-vop_ref[0][0]) + h3 * (-vop_ref[0][0]) +
(-r * sprite_ref[0][0] + virtual_ref[1][0]) * (-r * sprite_ref[0][0] + virtual_ref[1][0]) *
w3 * (-vop_ref[0][1]) + w3 * (-vop_ref[0][1]) +
(1 << (alpha + beta + rho - min_ab - 1)); (1 << (alpha + beta + rho - min_ab - 1));
s->sprite_offset[0][1] = (sprite_ref[0][1] << (alpha + beta + rho - min_ab)) + s->sprite_offset[0][1] = (sprite_ref[0][1] * (1 << (alpha + beta + rho - min_ab))) +
(-r * sprite_ref[0][1] + virtual_ref[0][1]) * (-r * sprite_ref[0][1] + virtual_ref[0][1]) *
h3 * (-vop_ref[0][0]) + h3 * (-vop_ref[0][0]) +
(-r * sprite_ref[0][1] + virtual_ref[1][1]) * (-r * sprite_ref[0][1] + virtual_ref[1][1]) *
...@@ -368,10 +368,10 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g ...@@ -368,10 +368,10 @@ static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *g
int shift_y = 16 - ctx->sprite_shift[0]; int shift_y = 16 - ctx->sprite_shift[0];
int shift_c = 16 - ctx->sprite_shift[1]; int shift_c = 16 - ctx->sprite_shift[1];
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
s->sprite_offset[0][i] <<= shift_y; s->sprite_offset[0][i] *= 1 << shift_y;
s->sprite_offset[1][i] <<= shift_c; s->sprite_offset[1][i] *= 1 << shift_c;
s->sprite_delta[0][i] <<= shift_y; s->sprite_delta[0][i] *= 1 << shift_y;
s->sprite_delta[1][i] <<= shift_y; s->sprite_delta[1][i] *= 1 << shift_y;
ctx->sprite_shift[i] = 16; ctx->sprite_shift[i] = 16;
} }
s->real_sprite_warping_points = ctx->num_sprite_warping_points; s->real_sprite_warping_points = ctx->num_sprite_warping_points;
......
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