diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2016-07-13 15:02:41 -0400 |
---|---|---|
committer | Vittorio Giovara <vittorio.giovara@gmail.com> | 2016-07-20 19:30:22 +0200 |
commit | ed9b2a5178d7a7c5a95694da3a808af327f36aff (patch) | |
tree | 2d5cec28f076cc73e993b8b6c461588b52a723ab | |
parent | 90bc423212396e96a02edc1118982ab7f7766a63 (diff) | |
download | ffmpeg-ed9b2a5178d7a7c5a95694da3a808af327f36aff.tar.gz |
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>
-rw-r--r-- | libavformat/mov.c | 9 |
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; |