[vlc-commits] [Git][videolan/vlc][master] 2 commits: contrib: ebml: fix leak on upper element found inside last element
Steve Lhomme (@robUx4)
gitlab at videolan.org
Wed Jun 3 11:20:04 UTC 2026
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
f271469e by Steve Lhomme at 2026-06-03T10:43:36+00:00
contrib: ebml: fix leak on upper element found inside last element
Fixes #29887
- - - - -
ca850d69 by Steve Lhomme at 2026-06-03T10:43:36+00:00
demux: mkv: use misplaced element logging
It was dead code following 5ce2f287851396e650d57da3f9804e2653198aaf.
- - - - -
3 changed files:
- + contrib/src/ebml/0001-EbmlMaster-fix-leak-on-upper-element-found-inside-th.patch
- contrib/src/ebml/rules.mak
- modules/demux/mkv/matroska_segment_parse.cpp
Changes:
=====================================
contrib/src/ebml/0001-EbmlMaster-fix-leak-on-upper-element-found-inside-th.patch
=====================================
@@ -0,0 +1,51 @@
+From 370bcc4fb22af9d07bca911457e5fe20119e3bd2 Mon Sep 17 00:00:00 2001
+From: Steve Lhomme <robux4 at ycbcr.xyz>
+Date: Tue, 2 Jun 2026 11:37:54 +0200
+Subject: [PATCH] EbmlMaster: fix leak on upper element found inside the last
+ element
+
+We found an upper element and there is not data to read after the current
+element within its parent. That upper element is misplaced and should be
+discarded.
+The last element is truncated and doesn't contain the rest of its data.
+---
+ src/EbmlMaster.cpp | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/src/EbmlMaster.cpp b/src/EbmlMaster.cpp
+index 4851618..d91ab06 100644
+--- a/src/EbmlMaster.cpp
++++ b/src/EbmlMaster.cpp
+@@ -445,8 +445,13 @@ void EbmlMaster::Read(EbmlStream & inDataStream, const EbmlSemanticContext & sCo
+
+ if (UpperEltFound) {
+ --UpperEltFound;
+- if (UpperEltFound > 0 || MaxSizeToRead <= 0)
++ if (UpperEltFound > 0)
+ goto processCrc;
++ if (MaxSizeToRead <= 0) {
++ delete FoundElt;
++ FoundElt = nullptr;
++ goto processCrc;
++ }
+ ElementLevelA = FoundElt;
+ }
+
+@@ -456,8 +461,13 @@ void EbmlMaster::Read(EbmlStream & inDataStream, const EbmlSemanticContext & sCo
+
+ if (UpperEltFound > 0) {
+ UpperEltFound--;
+- if (UpperEltFound > 0 || MaxSizeToRead <= 0)
++ if (UpperEltFound > 0)
++ goto processCrc;
++ if (MaxSizeToRead <= 0) {
++ delete FoundElt;
++ FoundElt = nullptr;
+ goto processCrc;
++ }
+ ElementLevelA = FoundElt;
+ if (IsFiniteSize() && ElementLevelA->IsFiniteSize()) {
+ if (ElementLevelA->GetEndPosition() > GetEndPosition()) {
+--
+2.52.0.windows.1
+
=====================================
contrib/src/ebml/rules.mak
=====================================
@@ -22,6 +22,7 @@ ebml: libebml-$(EBML_VERSION).tar.xz .sum-ebml
$(APPLY) $(SRC)/ebml/0001-EbmlHead-do-not-allow-to-have-an-infinite-unknown-si.patch
$(APPLY) $(SRC)/ebml/0001-include-iterator-for-std-back_inserter.patch
$(APPLY) $(SRC)/ebml/0002-include-new-for-std-nothrow.patch
+ $(APPLY) $(SRC)/ebml/0001-EbmlMaster-fix-leak-on-upper-element-found-inside-th.patch
$(MOVE)
.ebml: ebml toolchain.cmake
=====================================
modules/demux/mkv/matroska_segment_parse.cpp
=====================================
@@ -790,15 +790,14 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
#if LIBMATROSKA_VERSION >= 0x010405
E_CASE( KaxVideoColour, colours)
{
- ONLY_FMT(VIDEO);
debug( vars, "Video Colors");
if (vars.tk->fmt.i_cat != VIDEO_ES ) {
msg_Err( vars.p_demuxer, "Video colors elements not allowed for this track" );
- } else {
+ return;
+ }
vars.level += 1;
dispatcher.iterate (colours.begin (), colours.end (), &vars );
vars.level -= 1;
- }
}
E_CASE( KaxVideoColourRange, range )
{
@@ -975,15 +974,14 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
}
E_CASE( KaxVideoColourMasterMeta, mastering )
{
- ONLY_FMT(VIDEO);
debug( vars, "Video Mastering Metadata");
if (vars.tk->fmt.i_cat != VIDEO_ES ) {
msg_Err( vars.p_demuxer, "Video metadata elements not allowed for this track" );
- } else {
+ return;
+ }
vars.level += 1;
dispatcher.iterate (mastering.begin (), mastering.end (), &vars );
vars.level -= 1;
- }
}
E_CASE( KaxVideoLuminanceMax, maxLum )
{
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/b6145973e2256338715f08d62c05e26b51faee82...ca850d6979a333e8fe191532e46c078f4724facf
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/b6145973e2256338715f08d62c05e26b51faee82...ca850d6979a333e8fe191532e46c078f4724facf
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help
More information about the vlc-commits
mailing list