mov: Do not allow updating the time scale after it has been set
authorMartin Storsjö <martin@martin.st>
Mon, 15 Jul 2013 14:13:54 +0000 (17:13 +0300)
committerMartin Storsjö <martin@martin.st>
Mon, 15 Jul 2013 18:38:58 +0000 (21:38 +0300)
The time scale is set in mdhd, and later validated in the
enclosing trak atom once all of its children have been parsed.

A loose mdhd atom outside of a trak atom could update the time
scale of the last stream without any validation.

Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Cc: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
libavformat/mov.c

index b33b30d..0c938cd 100644 (file)
@@ -713,6 +713,11 @@ static int mov_read_mdhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
     st = c->fc->streams[c->fc->nb_streams-1];
     sc = st->priv_data;
 
+    if (sc->time_scale) {
+        av_log(c->fc, AV_LOG_ERROR, "Multiple mdhd?\n");
+        return AVERROR_INVALIDDATA;
+    }
+
     version = avio_r8(pb);
     if (version > 1) {
         avpriv_request_sample(c->fc, "Version %d", version);