aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-08-01 13:50:21 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2016-08-13 13:08:57 +0200
commit8b3d9c33d617d2a94c8733e4a57a8040ae1d41f5 (patch)
tree6c86c237f12e3620e95fa861300669ba3b224aa4
parentc5757266219c48bd4e3bbb382df2ff6048d19f26 (diff)
downloadandroid_external_ffmpeg-8b3d9c33d617d2a94c8733e4a57a8040ae1d41f5.tar.gz
android_external_ffmpeg-8b3d9c33d617d2a94c8733e4a57a8040ae1d41f5.tar.bz2
android_external_ffmpeg-8b3d9c33d617d2a94c8733e4a57a8040ae1d41f5.zip
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> (cherry picked from commit 77b0f3f26d33d4f46f274896e0583ad1f5936b7c) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/vp9_parser.c17
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