Commit 77b0f3f2 authored by Michael Niedermayer's avatar Michael Niedermayer

avcodec/vp9_parser: Check the input frame sizes for being consistent

Suggested-by: BBB
Fixed-by: BBB
Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent fd2cde02
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
typedef struct VP9ParseContext { typedef struct VP9ParseContext {
int n_frames; // 1-8 int n_frames; // 1-8
int size[8]; int size[8];
int marker_size;
int64_t pts; int64_t pts;
} VP9ParseContext; } VP9ParseContext;
...@@ -88,6 +89,21 @@ static int parse(AVCodecParserContext *ctx, ...@@ -88,6 +89,21 @@ static int parse(AVCodecParserContext *ctx,
return 0; return 0;
} }
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) { if (s->n_frames > 0) {
*out_data = data; *out_data = data;
*out_size = s->size[--s->n_frames]; *out_size = s->size[--s->n_frames];
...@@ -131,6 +147,7 @@ static int parse(AVCodecParserContext *ctx, ...@@ -131,6 +147,7 @@ static int parse(AVCodecParserContext *ctx,
data += sz; \ data += sz; \
size -= sz; \ size -= sz; \
} \ } \
s->marker_size = size; \
parse_frame(ctx, *out_data, *out_size); \ parse_frame(ctx, *out_data, *out_size); \
return s->n_frames > 0 ? *out_size : full_size return s->n_frames > 0 ? *out_size : full_size
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment