[vlc-commits] [Git][videolan/vlc][master] 5 commits: demux: mkv: release the p_prev element regardless of the position of Dummy
Felix Paul Kühne (@fkuehne)
gitlab at videolan.org
Sat Apr 25 12:18:32 UTC 2026
Felix Paul Kühne pushed to branch master at VideoLAN / VLC
Commits:
5a010d93 by Steve Lhomme at 2026-04-25T14:06:09+02:00
demux: mkv: release the p_prev element regardless of the position of Dummy
Fixes #29539
- - - - -
8a95e7dc by Steve Lhomme at 2026-04-25T14:06:09+02:00
demux: mkv: factorize code to delete previous element on Dummy
- - - - -
063dba28 by Steve Lhomme at 2026-04-25T14:06:09+02:00
demux: mkv: factorize the goto when encountering a dummy element
- - - - -
dd3639c0 by Steve Lhomme at 2026-04-25T14:06:09+02:00
demux: mkv: use a boolean rather than a pointer
We only need to know if we need to return the previous upper level element.
Not need to use a pointer we don't know who should release it.
- - - - -
367e7f07 by Steve Lhomme at 2026-04-25T14:06:09+02:00
demux: mkv: remove always true test
If mi_level = 0 we return early and the level cannot be negative.
- - - - -
2 changed files:
- modules/demux/mkv/Ebml_parser.cpp
- modules/demux/mkv/Ebml_parser.hpp
Changes:
=====================================
modules/demux/mkv/Ebml_parser.cpp
=====================================
@@ -34,7 +34,6 @@ EbmlParser::EbmlParser( matroska_iostream_c *es, EbmlElement *el_start, demux_t
p_demux( p_demux ),
m_es( es ),
mi_level( 1 ),
- m_got( NULL ),
mi_user_level( 1 ),
mb_keep( false ),
mb_dummy( var_InheritBool( p_demux, "mkv-use-dummy" ) )
@@ -143,10 +142,10 @@ EbmlElement *EbmlParser::Get( bool allow_overshoot )
{
return NULL;
}
- if( m_got )
+ if( return_previous_parent )
{
- EbmlElement *ret = m_got;
- m_got = NULL;
+ EbmlElement *ret = m_el[mi_level];
+ return_previous_parent = false;
if( mi_level > 0 && m_el[mi_level-1]->IsFiniteSize() && ret->IsFiniteSize() &&
ret->GetEndPosition() > m_el[mi_level-1]->GetEndPosition() )
@@ -258,8 +257,9 @@ next:
}
delete m_el[mi_level - 1];
- m_got = m_el[mi_level -1] = m_el[mi_level];
+ m_el[mi_level -1] = m_el[mi_level];
m_el[mi_level] = NULL;
+ return_previous_parent = m_el[mi_level - 1] != NULL;
mi_level--;
i_ulev--;
@@ -293,6 +293,16 @@ next:
b_bad_position = true;
}
+ if( p_prev )
+ {
+ if( !mb_keep )
+ {
+ delete p_prev;
+ p_prev = NULL;
+ }
+ mb_keep = false;
+ }
+
if( n_call < M_EL_MAXSIZE && !b_bad_position && m_el[mi_level]->IsFiniteSize() &&
( !m_el[mi_level-1]->IsFiniteSize() ||
m_el[mi_level]->GetEndPosition() <= m_el[mi_level-1]->GetEndPosition() ) )
@@ -300,17 +310,7 @@ next:
/* The element fits inside its upper element */
msg_Warn( p_demux, "Dummy element found %" PRIu64 "... skipping it",
m_el[mi_level]->GetElementPosition() );
- if( p_prev )
- {
- if( !mb_keep )
- {
- delete p_prev;
- p_prev = NULL;
- }
- mb_keep = false;
- }
n_call++;
- goto next;
}
else
{
@@ -319,30 +319,21 @@ next:
"Dummy element too large or misplaced at %" PRIu64 "... skipping to next upper element",
m_el[mi_level]->GetElementPosition() );
- if( mi_level >= 1 &&
- m_el[mi_level]->IsFiniteSize() && m_el[mi_level-1]->IsFiniteSize() &&
+ if( m_el[mi_level]->IsFiniteSize() && m_el[mi_level-1]->IsFiniteSize() &&
m_el[mi_level]->GetElementPosition() >= m_el[mi_level-1]->GetEndPosition() )
{
msg_Err(p_demux, "This element is outside its known parent... upping level");
delete m_el[mi_level - 1];
- m_got = m_el[mi_level -1] = m_el[mi_level];
+ m_el[mi_level -1] = m_el[mi_level];
m_el[mi_level] = NULL;
+ return_previous_parent = m_el[mi_level - 1] != NULL;
mi_level--;
return NULL;
}
-
- if( p_prev )
- {
- if( !mb_keep )
- {
- delete p_prev;
- p_prev = NULL;
- }
- mb_keep = false;
- }
- goto next;
}
+
+ goto next;
}
if( p_prev )
=====================================
modules/demux/mkv/Ebml_parser.hpp
=====================================
@@ -59,7 +59,7 @@ class EbmlParser
size_t mi_level;
EbmlElement *m_el[M_EL_MAXSIZE];
- EbmlElement *m_got;
+ bool return_previous_parent = false;
size_t mi_user_level;
bool mb_keep;
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/f817aa14e54342450696989b3eae8f6c8c736535...367e7f07c206f78b9fdb03b8da1d45001f5278a4
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/f817aa14e54342450696989b3eae8f6c8c736535...367e7f07c206f78b9fdb03b8da1d45001f5278a4
You're receiving this email because of your account on code.videolan.org.
More information about the vlc-commits
mailing list