diff options
-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; |