aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/indeo5.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-02-14 14:12:14 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-02-14 14:12:14 +0100
commitacada70ffbd729516495ee683f70abad124f93d5 (patch)
tree3c4626e79bca9730658665863ec93e038a8ad93e /libavcodec/indeo5.c
parent4f91c45644931064901986bca70a8903c7956564 (diff)
parentdb5b454c3d20f0e2e7fff8f0091e776ae9757725 (diff)
downloadffmpeg-acada70ffbd729516495ee683f70abad124f93d5.tar.gz
Merge remote-tracking branch 'qatar/release/0.7' into release/0.8
* qatar/release/0.7: Update changelog for 0.7.7 release mpeg12: do not decode extradata more than once. indeo4/5: check empty tile size in decode_mb_info(). dfa: improve boundary checks in decode_dds1() indeo5dec: Make sure we have had a valid gop header. rv34: error out on size changes with frame threading Conflicts: Changelog Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/indeo5.c')
-rw-r--r--libavcodec/indeo5.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/libavcodec/indeo5.c b/libavcodec/indeo5.c
index 645ac33b16..15fad5872b 100644
--- a/libavcodec/indeo5.c
+++ b/libavcodec/indeo5.c
@@ -76,6 +76,8 @@ typedef struct {
int is_scalable;
uint32_t lock_word;
IVIPicConfig pic_conf;
+
+ int gop_invalid;
} IVI5DecContext;
@@ -339,8 +341,12 @@ static int decode_pic_hdr(IVI5DecContext *ctx, AVCodecContext *avctx)
ctx->frame_num = get_bits(&ctx->gb, 8);
if (ctx->frame_type == FRAMETYPE_INTRA) {
- if (decode_gop_header(ctx, avctx))
- return -1;
+ ctx->gop_invalid = 1;
+ if (decode_gop_header(ctx, avctx)) {
+ av_log(avctx, AV_LOG_ERROR, "Invalid GOP header, skipping frames.\n");
+ return AVERROR_INVALIDDATA;
+ }
+ ctx->gop_invalid = 0;
}
if (ctx->frame_type != FRAMETYPE_NULL) {
@@ -617,8 +623,10 @@ static int decode_band(IVI5DecContext *ctx, int plane_num,
tile->is_empty = get_bits1(&ctx->gb);
if (tile->is_empty) {
- ff_ivi_process_empty_tile(avctx, band, tile,
+ result = ff_ivi_process_empty_tile(avctx, band, tile,
(ctx->planes[0].bands[0].mb_size >> 3) - (band->mb_size >> 3));
+ if (result < 0)
+ break;
} else {
tile->data_size = ff_ivi_dec_tile_data_size(&ctx->gb);
@@ -765,6 +773,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
"Error while decoding picture header: %d\n", result);
return -1;
}
+ if (ctx->gop_invalid)
+ return AVERROR_INVALIDDATA;
if (ctx->gop_flags & IVI5_IS_PROTECTED) {
av_log(avctx, AV_LOG_ERROR, "Password-protected clip!\n");