[FFmpeg-cvslog] Merge commit '9765549f551ff40869aee1a6492b6a976c86cfe9'
Derek Buitenhuis
git at videolan.org
Thu Apr 14 15:02:03 CEST 2016
ffmpeg | branch: master | Derek Buitenhuis <derek.buitenhuis at gmail.com> | Thu Apr 14 14:01:31 2016 +0100| [0520d573db71171053a684b1b2fed0598df1641f] | committer: Derek Buitenhuis
Merge commit '9765549f551ff40869aee1a6492b6a976c86cfe9'
* commit '9765549f551ff40869aee1a6492b6a976c86cfe9':
mpegts: Forward the errors on mpeg4 objects parsing
Merged-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0520d573db71171053a684b1b2fed0598df1641f
---
libavformat/mpegts.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 5cdab58..e3de46a 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -1362,6 +1362,8 @@ static int parse_MP4ODescrTag(MP4DescrParseContext *d, int64_t off, int len)
static int parse_MP4ESDescrTag(MP4DescrParseContext *d, int64_t off, int len)
{
int es_id = 0;
+ int ret = 0;
+
if (d->descr_count >= d->max_descr_count)
return AVERROR_INVALIDDATA;
ff_mp4_parse_es_descr(&d->pb, &es_id);
@@ -1369,12 +1371,13 @@ static int parse_MP4ESDescrTag(MP4DescrParseContext *d, int64_t off, int len)
d->active_descr->es_id = es_id;
update_offsets(&d->pb, &off, &len);
- parse_mp4_descr(d, off, len, MP4DecConfigDescrTag);
+ if ((ret = parse_mp4_descr(d, off, len, MP4DecConfigDescrTag)) < 0)
+ return ret;
update_offsets(&d->pb, &off, &len);
if (len > 0)
- parse_mp4_descr(d, off, len, MP4SLDescrTag);
+ ret = parse_mp4_descr(d, off, len, MP4SLDescrTag);
d->active_descr = NULL;
- return 0;
+ return ret;
}
static int parse_MP4DecConfigDescrTag(MP4DescrParseContext *d, int64_t off,
@@ -1435,6 +1438,8 @@ static int parse_mp4_descr(MP4DescrParseContext *d, int64_t off, int len,
{
int tag;
int len1 = ff_mp4_read_descr(d->s, &d->pb, &tag);
+ int ret = 0;
+
update_offsets(&d->pb, &off, &len);
if (len < 0 || len1 > len || len1 <= 0) {
av_log(d->s, AV_LOG_ERROR,
@@ -1445,30 +1450,32 @@ static int parse_mp4_descr(MP4DescrParseContext *d, int64_t off, int len,
if (d->level++ >= MAX_LEVEL) {
av_log(d->s, AV_LOG_ERROR, "Maximum MP4 descriptor level exceeded\n");
+ ret = AVERROR_INVALIDDATA;
goto done;
}
if (target_tag && tag != target_tag) {
av_log(d->s, AV_LOG_ERROR, "Found tag %x expected %x\n", tag,
target_tag);
+ ret = AVERROR_INVALIDDATA;
goto done;
}
switch (tag) {
case MP4IODescrTag:
- parse_MP4IODescrTag(d, off, len1);
+ ret = parse_MP4IODescrTag(d, off, len1);
break;
case MP4ODescrTag:
- parse_MP4ODescrTag(d, off, len1);
+ ret = parse_MP4ODescrTag(d, off, len1);
break;
case MP4ESDescrTag:
- parse_MP4ESDescrTag(d, off, len1);
+ ret = parse_MP4ESDescrTag(d, off, len1);
break;
case MP4DecConfigDescrTag:
- parse_MP4DecConfigDescrTag(d, off, len1);
+ ret = parse_MP4DecConfigDescrTag(d, off, len1);
break;
case MP4SLDescrTag:
- parse_MP4SLDescrTag(d, off, len1);
+ ret = parse_MP4SLDescrTag(d, off, len1);
break;
}
@@ -1476,7 +1483,7 @@ static int parse_mp4_descr(MP4DescrParseContext *d, int64_t off, int len,
done:
d->level--;
avio_seek(&d->pb, off + len1, SEEK_SET);
- return 0;
+ return ret;
}
static int mp4_read_iods(AVFormatContext *s, const uint8_t *buf, unsigned size,
======================================================================
More information about the ffmpeg-cvslog
mailing list