diff mbox

[FFmpeg-devel] lavf/mov: Do not fail hard for more mov atoms

Message ID CAB0OVGru5KT0n+UcT6kL69T5kJ6H7FWodzLzGaGJt8VBNePdJA@mail.gmail.com
State Superseded
Headers show

Commit Message

Carl Eugen Hoyos Jan. 13, 2019, 10:14 p.m. UTC
Hi!

Attached patch fixes ticket #7679.

Please comment, Carl Eugen

Comments

Michael Niedermayer Jan. 14, 2019, 9:05 a.m. UTC | #1
On Sun, Jan 13, 2019 at 11:14:52PM +0100, Carl Eugen Hoyos wrote:
> Hi!
> 
> Attached patch fixes ticket #7679.
> 
> Please comment, Carl Eugen

>  mov.c |   12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> a2759589f6ab06b09057969490ffc13291965144  0001-lavf-mov-Do-not-fail-hard-for-more-invalid-atoms.patch
> From ea6afa36d5ceb6e027176f051e7886f0648e3ac2 Mon Sep 17 00:00:00 2001
> From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
> Date: Sun, 13 Jan 2019 23:07:06 +0100
> Subject: [PATCH] lavf/mov: Do not fail hard for more invalid atoms.
> 
> This is what several other players do and what FFmpeg already does for the sidx atom.
> 
> Fixes ticket #7679.
> ---
>  libavformat/mov.c |   12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)

If a atom is ignored/discarded it should not have changed state of other
things. This patch would break out after some fields are updated

thx

[...]
diff mbox

Patch

From ea6afa36d5ceb6e027176f051e7886f0648e3ac2 Mon Sep 17 00:00:00 2001
From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
Date: Sun, 13 Jan 2019 23:07:06 +0100
Subject: [PATCH] lavf/mov: Do not fail hard for more invalid atoms.

This is what several other players do and what FFmpeg already does for the sidx atom.

Fixes ticket #7679.
---
 libavformat/mov.c |   12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 970cd87..50507cf 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -4558,8 +4558,8 @@  static int mov_read_tfhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
             break;
         }
     if (!trex) {
-        av_log(c->fc, AV_LOG_ERROR, "could not find corresponding trex\n");
-        return AVERROR_INVALIDDATA;
+        av_log(c->fc, AV_LOG_WARNING, "could not find corresponding trex id %u\n", frag->track_id);
+        return 0;
     }
 
     frag->base_data_offset = flags & MOV_TFHD_BASE_DATA_OFFSET ?
@@ -4639,8 +4639,8 @@  static int mov_read_tfdt(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         }
     }
     if (!st) {
-        av_log(c->fc, AV_LOG_ERROR, "could not find corresponding track id %u\n", frag->track_id);
-        return AVERROR_INVALIDDATA;
+        av_log(c->fc, AV_LOG_WARNING, "could not find corresponding track id %u\n", frag->track_id);
+        return 0;
     }
     sc = st->priv_data;
     if (sc->pseudo_stream_id + 1 != frag->stsd_id && sc->pseudo_stream_id != -1)
@@ -4686,8 +4686,8 @@  static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom)
         }
     }
     if (!st) {
-        av_log(c->fc, AV_LOG_ERROR, "could not find corresponding track id %u\n", frag->track_id);
-        return AVERROR_INVALIDDATA;
+        av_log(c->fc, AV_LOG_WARNING, "could not find corresponding track id %u\n", frag->track_id);
+        return 0;
     }
     sc = st->priv_data;
     if (sc->pseudo_stream_id+1 != frag->stsd_id && sc->pseudo_stream_id != -1)
-- 
1.7.10.4