[vlc-commits] [Git][videolan/vlc][master] 2 commits: demux: mkv: do not allow infinite elements inside finite parents
Steve Lhomme (@robUx4)
gitlab at videolan.org
Tue Apr 28 16:57:01 UTC 2026
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
85befdbe by Steve Lhomme at 2026-04-28T13:50:32+00:00
demux: mkv: do not allow infinite elements inside finite parents
Only Segment [^1] and Clusters [^2] are allowed to be infinite.
And they are not read through this code.
libmatroska still allows any Master element to be infinite.
Fixes #29578
[^1]: https://www.rfc-editor.org/rfc/rfc9559#section-5.1
[^2]: https://www.rfc-editor.org/rfc/rfc9559#section-5.1.3
- - - - -
ec5601c0 by Steve Lhomme at 2026-04-28T13:50:32+00:00
demux: mkv: do not SkipData on elements with an unknown size
It can loop infinitely.
Ref #29578
- - - - -
1 changed file:
- modules/demux/mkv/Ebml_parser.cpp
Changes:
=====================================
modules/demux/mkv/Ebml_parser.cpp
=====================================
@@ -147,21 +147,32 @@ EbmlElement *EbmlParser::Get( bool allow_overshoot )
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() )
+ if( mi_level > 0 && m_el[mi_level-1]->IsFiniteSize() )
{
- msg_Err( p_demux, "EBML element at %" PRIu64 " extends beyond parent boundary (%" PRIu64 " beyond %" PRIu64 ")",
- m_el[mi_level]->GetElementPosition(), m_el[mi_level]->GetEndPosition(), m_el[mi_level-1]->GetEndPosition() );
- delete ret;
- m_el[mi_level] = NULL;
- return NULL;
+ if( ret->IsFiniteSize() &&
+ ret->GetEndPosition() > m_el[mi_level-1]->GetEndPosition() )
+ {
+ msg_Err( p_demux, "EBML element at %" PRIu64 " extends beyond parent boundary (%" PRIu64 " beyond %" PRIu64 ")",
+ ret->GetElementPosition(), ret->GetEndPosition(), m_el[mi_level-1]->GetEndPosition() );
+ delete ret;
+ m_el[mi_level] = NULL;
+ return NULL;
+ }
+ if( !ret->IsFiniteSize() )
+ {
+ msg_Err( p_demux, "Infinite EBML element %s at %" PRIu64 " inside finite parent",
+ EBML_NAME(ret), ret->GetElementPosition() );
+ delete ret;
+ m_el[mi_level] = NULL;
+ return NULL;
+ }
}
return ret;
}
next:
p_prev = m_el[mi_level];
- if( p_prev )
+ if( p_prev && p_prev->IsFiniteSize() )
p_prev->SkipData( *m_es, EBML_CONTEXT(p_prev) );
uint64_t i_max_read;
@@ -270,7 +281,7 @@ next:
{
msg_Dbg( p_demux,"MKV/Ebml Parser: m_el[mi_level] == NULL" );
/* go back to the end of the parent */
- if( p_prev )
+ if( p_prev && p_prev->IsFiniteSize() )
p_prev->SkipData( *m_es, EBML_CONTEXT(p_prev) );
}
else if( m_el[mi_level]->IsDummy() && !mb_dummy )
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/a29f54214208df3bf232e3926fb332bf13ec79ee...ec5601c05a8cc5600f177efb474339be3ffe87f0
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/a29f54214208df3bf232e3926fb332bf13ec79ee...ec5601c05a8cc5600f177efb474339be3ffe87f0
You're receiving this email because of your account on code.videolan.org.
More information about the vlc-commits
mailing list