diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2016-08-01 13:50:21 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2016-08-01 17:05:51 +0200 |
commit | 77b0f3f26d33d4f46f274896e0583ad1f5936b7c (patch) | |
tree | e5c002c79e005fefdbdc15b1611ea54b47c97cd3 /libavcodec/vp9_parser.c | |
parent | fd2cde02346c823b72377b74a5b52b1527ce02e2 (diff) | |
download | ffmpeg-77b0f3f26d33d4f46f274896e0583ad1f5936b7c.tar.gz |
avcodec/vp9_parser: Check the input frame sizes for being consistent
Suggested-by: BBB
Fixed-by: BBB
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/vp9_parser.c')
-rw-r--r-- | libavcodec/vp9_parser.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libavcodec/vp9_parser.c b/libavcodec/vp9_parser.c index 2e9235e657..9900e7ab1f 100644 --- a/libavcodec/vp9_parser.c +++ b/libavcodec/vp9_parser.c @@ -28,6 +28,7 @@ typedef struct VP9ParseContext { int n_frames; // 1-8 int size[8]; + int marker_size; int64_t pts; } VP9ParseContext; @@ -89,6 +90,21 @@ static int parse(AVCodecParserContext *ctx, } if (s->n_frames > 0) { + int i; + int size_sum = 0; + + for (i = 0; i < s->n_frames ;i++) + size_sum += s->size[i]; + size_sum += s->marker_size; + + if (size_sum != size) { + av_log(avctx, AV_LOG_ERROR, "Inconsistent input frame sizes %d %d\n", + size_sum, size); + s->n_frames = 0; + } + } + + if (s->n_frames > 0) { *out_data = data; *out_size = s->size[--s->n_frames]; parse_frame(ctx, *out_data, *out_size); @@ -131,6 +147,7 @@ static int parse(AVCodecParserContext *ctx, data += sz; \ size -= sz; \ } \ + s->marker_size = size; \ parse_frame(ctx, *out_data, *out_size); \ return s->n_frames > 0 ? *out_size : full_size |