On 3/27/2019 12:18 PM, Andreas Rheinhardt via ffmpeg-devel wrote:
By default, the data_offset member of the AVFormatInternal of the
AVFormatContext associated with the MatroskaDemuxContext has not been
initialized explicitly by any Matroska-specific function, so that it was
initialized by default to the offset at the end of matroska_read_header,
i.e. usually to the offset of the length field of the first encountered
cluster. This meant that in case that the Matroska-specific seek-code
fails because there are no index entries for the target track a seek to
data_offset would be performed and ordinary parsing would start from
there which is nonsense: The length field would be treated as EBML ID and
(if the length field is not longer than four bytes (EBML numbers that
long are rejected as invalid EBML IDs)) and whatever comes next would be
treated as its EBML size although it simply isn't.

Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@googlemail.com>
---
  libavformat/matroskadec.c | 3 +++
  1 file changed, 3 insertions(+)

diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 49f8ff4082..f9811b54a1 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -2651,6 +2651,9 @@ static int matroska_read_header(AVFormatContext *s)
          pos = avio_tell(matroska->ctx->pb);
          res = ebml_parse(matroska, matroska_segment, matroska);
      }
+    /* Set data_offset as it might be needed later by seek_frame_generic. */
+    if (matroska->current_id)

I'm surprised this doesn't error out if a (level 1) ID is not found here.

+        s->internal->data_offset = avio_tell(matroska->ctx->pb) - 4;

The "- 4" is OK as long as level 1 elements are always 4 bytes (which is the case). But if matroska_resync() ever exits if it finds an EBML Void or CRC-32 then this will break.

The code is safe for now but may not be future proof.

      matroska_execute_seekhead(matroska);
if (!matroska->time_scale)
--
2.19.2

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to