aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/matroskadec.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2019-05-17 00:30:17 +0200
committerJames Almer <jamrial@gmail.com>2019-07-16 16:17:00 -0300
commit9c6d14ab84e424bdb99a1a4b499311ecf8687ceb (patch)
tree7d0930fede59d103afa7ee1e12e373037cbba1fc /libavformat/matroskadec.c
parent3c70b941d5d1f756cf4e141c3c7ee921478ec300 (diff)
downloadffmpeg-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.c11
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