diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2019-05-17 00:30:17 +0200 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2019-07-16 16:17:00 -0300 |
commit | 9c6d14ab84e424bdb99a1a4b499311ecf8687ceb (patch) | |
tree | 7d0930fede59d103afa7ee1e12e373037cbba1fc /libavformat/matroskadec.c | |
parent | 3c70b941d5d1f756cf4e141c3c7ee921478ec300 (diff) | |
download | ffmpeg-9c6d14ab84e424bdb99a1a4b499311ecf8687ceb.tar.gz |
avformat/matroskadec: Fix probing of unknown-length headers
matroska_probe did not support the case of an unknown-length EBML header
at all; given that libavformat's Matroska muxer used to produce such
files in the streaming case, support for them has been added.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavformat/matroskadec.c')
-rw-r--r-- | libavformat/matroskadec.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 6eab076538..24d3ef2b74 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -1519,9 +1519,14 @@ static int matroska_probe(const AVProbeData *p) while (n < size) total = (total << 8) | p->buf[4 + n++]; - /* Does the probe data contain the whole header? */ - if (p->buf_size < 4 + size + total) - return 0; + if (total + 1 == 1ULL << (7 * size)){ + /* Unknown-length header - simply parse the whole buffer. */ + total = p->buf_size - 4 - size; + } else { + /* Does the probe data contain the whole header? */ + if (p->buf_size < 4 + size + total) + return 0; + } /* The header should contain a known document type. For now, * we don't parse the whole header but simply check for the |