From: Aurelien Jacobs Date: Fri, 11 Jun 2010 16:43:47 +0000 (+0000) Subject: matroskadec: add support for live broadcast containing unknown size clusters X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=8dbe48fccb9be18fff0b42dc3dfc85ea50ed2a3c;p=ffmpeg matroskadec: add support for live broadcast containing unknown size clusters This interrupt parsing and goes one ebml level up when encountering a cluster start inside an unknown sized element which is not supposed to contain a cluster. fix issue1991 Originally committed as revision 23589 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index e6c3fc78b1b..a486d249f24 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -518,7 +518,7 @@ static int ebml_level_end(MatroskaDemuxContext *matroska) if (matroska->num_levels > 0) { MatroskaLevel *level = &matroska->levels[matroska->num_levels - 1]; - if (pos - level->start >= level->length) { + if (pos - level->start >= level->length || matroska->current_id) { matroska->num_levels--; return 1; } @@ -716,6 +716,10 @@ static int ebml_parse_id(MatroskaDemuxContext *matroska, EbmlSyntax *syntax, for (i=0; syntax[i].id; i++) if (id == syntax[i].id) break; + if (!syntax[i].id && id == MATROSKA_ID_CLUSTER && + matroska->num_levels > 0 && + matroska->levels[matroska->num_levels-1].length == 0xffffffffffffffff) + return 0; // we reached the end of an unknown size cluster if (!syntax[i].id && id != EBML_ID_VOID && id != EBML_ID_CRC32) av_log(matroska->ctx, AV_LOG_INFO, "Unknown entry 0x%X\n", id); return ebml_parse_elem(matroska, &syntax[i], data);