avcodec/g2meet: Check for ff_els_decode_bit() failure in epic_decode_run_length()

Fixes invalid shift
Fixes: g2m_left_shift_2.wmv

Found-by: Piotr Bandurski <ami_stuff@o2.pl>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Michael Niedermayer 2016-01-10 16:59:42 +01:00
parent 79061bcec1
commit 030c7f0309
1 changed files with 6 additions and 1 deletions

View File

@ -631,6 +631,8 @@ static int epic_decode_run_length(ePICContext *dc, int x, int y, int tile_width,
(NN != N) << 1 | (NN != N) << 1 |
(NNW != NW); (NNW != NW);
WWneW = ff_els_decode_bit(&dc->els_ctx, &dc->W_ctx_rung[idx]); WWneW = ff_els_decode_bit(&dc->els_ctx, &dc->W_ctx_rung[idx]);
if (WWneW < 0)
return WWneW;
} }
if (WWneW) if (WWneW)
@ -837,10 +839,13 @@ static int epic_decode_tile(ePICContext *dc, uint8_t *out, int tile_height,
if (y < 2 || x < 2 || x == tile_width - 1) { if (y < 2 || x < 2 || x == tile_width - 1) {
run = 1; run = 1;
got_pixel = epic_handle_edges(dc, x, y, curr_row, above_row, &pix); got_pixel = epic_handle_edges(dc, x, y, curr_row, above_row, &pix);
} else } else {
got_pixel = epic_decode_run_length(dc, x, y, tile_width, got_pixel = epic_decode_run_length(dc, x, y, tile_width,
curr_row, above_row, curr_row, above_row,
above2_row, &pix, &run); above2_row, &pix, &run);
if (got_pixel < 0)
return got_pixel;
}
if (!got_pixel && !epic_predict_from_NW_NE(dc, x, y, run, if (!got_pixel && !epic_predict_from_NW_NE(dc, x, y, run,
tile_width, curr_row, tile_width, curr_row,