summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorVittorio Giovara <vittorio.giovara@gmail.com>2016-07-13 15:02:41 -0400
committerVittorio Giovara <vittorio.giovara@gmail.com>2016-07-20 19:30:22 +0200
commited9b2a5178d7a7c5a95694da3a808af327f36aff (patch)
tree2d5cec28f076cc73e993b8b6c461588b52a723ab /libavformat
parent90bc423212396e96a02edc1118982ab7f7766a63 (diff)
mov: Rework the check for invalid indexes in stsc
There are samples with invalid stsc that may work fine as is and do not need extradata change. So ignore any out of range index, and error out only when explode is set. Found-by: Matthieu Bouron <matthieu.bouron@stupeflix.com> Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/mov.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 826be02abc..ff39b58ef1 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1949,8 +1949,13 @@ static int mov_read_stsc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
sc->stsc_data[i].first = avio_rb32(pb);
sc->stsc_data[i].count = avio_rb32(pb);
sc->stsc_data[i].id = avio_rb32(pb);
- if (sc->stsc_data[i].id > sc->stsd_count)
- return AVERROR_INVALIDDATA;
+ if (sc->stsc_data[i].id < 0 || sc->stsc_data[i].id > sc->stsd_count) {
+ sc->stsc_data[i].id = 0;
+ if (c->fc->error_recognition & AV_EF_EXPLODE) {
+ av_log(c->fc, AV_LOG_ERROR, "Invalid stsc index.\n");
+ return AVERROR_INVALIDDATA;
+ }
+ }
}
sc->stsc_count = i;