|
|
|
@@ -333,11 +333,15 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, |
|
|
|
uint8_t *outptr; |
|
|
|
int dx, dy, w, h, depth, enc, chunks, res, size_left, ret; |
|
|
|
|
|
|
|
bytestream2_init(gb, buf, buf_size); |
|
|
|
bytestream2_skip(gb, 2); |
|
|
|
chunks = bytestream2_get_be16(gb); |
|
|
|
if (12LL * chunks > bytestream2_get_bytes_left(gb)) |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
if ((ret = ff_reget_buffer(avctx, c->pic)) < 0) |
|
|
|
return ret; |
|
|
|
|
|
|
|
bytestream2_init(gb, buf, buf_size); |
|
|
|
|
|
|
|
c->pic->key_frame = 0; |
|
|
|
c->pic->pict_type = AV_PICTURE_TYPE_P; |
|
|
|
|
|
|
|
@@ -369,8 +373,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
bytestream2_skip(gb, 2); |
|
|
|
chunks = bytestream2_get_be16(gb); |
|
|
|
|
|
|
|
while (chunks--) { |
|
|
|
if (bytestream2_get_bytes_left(gb) < 12) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Premature end of data!\n"); |
|
|
|
|