From 0ffd4ff8c06d655477928d562a1c896c2a2e4faa Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Wed, 2 Mar 2011 10:25:29 +0100 Subject: [PATCH] qtdemux: arrange for non-fatal error when parsing non-vital parts --- gst/qtdemux/qtdemux.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index 2280374..b043920 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -547,10 +547,18 @@ gst_qtdemux_pull_atom (GstQTDemux * qtdemux, guint64 offset, guint64 size, /* Sanity check: catch bogus sizes (fuzzed/broken files) */ if (G_UNLIKELY (size > QTDEMUX_MAX_ATOM_SIZE)) { - GST_ELEMENT_ERROR (qtdemux, STREAM, DEMUX, - (_("This file is invalid and cannot be played.")), - ("atom has bogus size %" G_GUINT64_FORMAT, size)); - return GST_FLOW_ERROR; + if (qtdemux->state != QTDEMUX_STATE_MOVIE && qtdemux->got_moov) { + /* we're pulling header but already got most interesting bits, + * so never mind the rest (e.g. tags) (that much) */ + GST_WARNING_OBJECT (qtdemux, "atom has bogus size %" G_GUINT64_FORMAT, + size); + return GST_FLOW_UNEXPECTED; + } else { + GST_ELEMENT_ERROR (qtdemux, STREAM, DEMUX, + (_("This file is invalid and cannot be played.")), + ("atom has bogus size %" G_GUINT64_FORMAT, size)); + return GST_FLOW_ERROR; + } } flow = gst_pad_pull_range (qtdemux->sinkpad, offset, size, buf); -- 2.7.4