int j;
int out = 0;
- if (width & 1)
+ if ((width & 1) || width * height / (2*(IR2_CODES - 0x7F)) > get_bits_left(&ctx->gb))
return AVERROR_INVALIDDATA;
/* first line contain absolute values, other lines contain deltas */
for (j = 1; j < height; j++) {
out = 0;
- if (get_bits_left(&ctx->gb) <= 0)
- return AVERROR_INVALIDDATA;
while (out < width) {
- int c = ir2_get_code(&ctx->gb);
+ int c;
+ if (get_bits_left(&ctx->gb) <= 0)
+ return AVERROR_INVALIDDATA;
+ c = ir2_get_code(&ctx->gb);
if (c >= 0x80) { /* we have a skip */
c -= 0x7F;
if (out + c*2 > width)
for (j = 0; j < height; j++) {
out = 0;
- if (get_bits_left(&ctx->gb) <= 0)
- return AVERROR_INVALIDDATA;
while (out < width) {
+ if (get_bits_left(&ctx->gb) <= 0)
+ return AVERROR_INVALIDDATA;
c = ir2_get_code(&ctx->gb);
if (c >= 0x80) { /* we have a skip */
c -= 0x7F;
int start, ret;
int ltab, ctab;
- if ((ret = ff_reget_buffer(avctx, p)) < 0)
+ if ((ret = ff_reget_buffer(avctx, p, 0)) < 0)
return ret;
start = 48; /* hardcoded for now */