summaryrefslogtreecommitdiff
path: root/libavcodec/mpeg12.c
diff options
context:
space:
mode:
authorJoseph Artsimovich <joseph@mirriad.com>2013-03-01 13:37:28 +0000
committerMichael Niedermayer <michaelni@gmx.at>2013-03-01 16:04:31 +0100
commit4a6bd346373b63d13c95cc2303346b0e971f0358 (patch)
tree29df174e87d1d2174a87bf39fbcc8c75e58b6406 /libavcodec/mpeg12.c
parent6c7d1608dd0cfcab99db2dd8fb0a00e410dd06b5 (diff)
Handle an invalid extra mpeg2 picture header following a frame-encoded picture.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/mpeg12.c')
-rw-r--r--libavcodec/mpeg12.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index 5e95ad7c4c..9d2743a6df 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -2269,6 +2269,7 @@ static int decode_chunks(AVCodecContext *avctx,
const uint8_t *buf_end = buf + buf_size;
int ret, input_size;
int last_code = 0;
+ int picture_start_code_seen = 0;
for (;;) {
/* find next start code */
@@ -2319,6 +2320,14 @@ static int decode_chunks(AVCodecContext *avctx,
break;
case PICTURE_START_CODE:
+ if (picture_start_code_seen && s2->picture_structure == PICT_FRAME) {
+ /* If it's a frame picture, there can't be more than one picture header.
+ Yet, it does happen and we need to handle it. */
+ av_log(avctx, AV_LOG_WARNING, "ignoring extra picture following a frame-picture\n");
+ break;
+ }
+ picture_start_code_seen = 1;
+
if (s2->width <= 0 || s2->height <= 0) {
av_log(avctx, AV_LOG_ERROR, "%dx%d is invalid\n", s2->width, s2->height);
return AVERROR_INVALIDDATA;