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 <[email protected]>

Signed-off-by: Vittorio Giovara <[email protected]>
---
 libavformat/mov.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index e0673e6..b8dd30a 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1949,8 +1949,11 @@ 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)
+                return AVERROR_INVALIDDATA;
+        }
     }
 
     sc->stsc_count = i;
-- 
2.9.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to