[vlc-commits] [Git][videolan/vlc][master] 3 commits: demux: mkv: debug the Dummy element buggy position

Felix Paul Kühne (@fkuehne) gitlab at videolan.org
Thu Mar 12 18:01:16 UTC 2026



Felix Paul Kühne pushed to branch master at VideoLAN / VLC


Commits:
f87900ad by Steve Lhomme at 2026-03-12T18:36:26+01:00
demux: mkv: debug the Dummy element buggy position

- - - - -
344e4f19 by Steve Lhomme at 2026-03-12T18:36:26+01:00
demux: mkv: use size_t for levels in m_el table

It should never be negative.

- - - - -
1e408840 by Steve Lhomme at 2026-03-12T18:36:26+01:00
demux: mkv: remove else after return

- - - - -


2 changed files:

- modules/demux/mkv/Ebml_parser.cpp
- modules/demux/mkv/Ebml_parser.hpp


Changes:

=====================================
modules/demux/mkv/Ebml_parser.cpp
=====================================
@@ -52,7 +52,7 @@ EbmlParser::~EbmlParser( void )
         return;
     }
 
-    for( int i = 1; i <= mi_level; i++ )
+    for( size_t i = 1; i <= mi_level; i++ )
     {
         if( !mb_keep )
         {
@@ -76,6 +76,7 @@ void EbmlParser::Up( void )
         msg_Warn( p_demux, "MKV/Ebml Parser: Up cannot escape itself" );
     }
 
+    assert(mi_user_level != 0);
     mi_user_level--;
 }
 
@@ -256,7 +257,7 @@ next:
         }
         return NULL;
     }
-    else if( m_el[mi_level] == NULL )
+    if( m_el[mi_level] == NULL )
     {
         msg_Dbg( p_demux,"MKV/Ebml Parser: m_el[mi_level] == NULL" );
         /* go back to the end of the parent */
@@ -278,7 +279,8 @@ next:
             p_prev && p_prev->IsFiniteSize() &&
             p_prev->GetEndPosition() != m_el[mi_level]->GetElementPosition() )
         {
-            msg_Err( p_demux, "Dummy Element at unexpected position... corrupted file?" );
+            msg_Err( p_demux, "Dummy Element at unexpected position (%" PRIu64 " instead of %" PRIu64 ")... corrupted file?",
+                        m_el[mi_level]->GetElementPosition(), p_prev->GetEndPosition() );
             b_bad_position = true;
         }
 
@@ -347,7 +349,7 @@ next:
 
 bool EbmlParser::IsTopPresent( EbmlElement *el ) const
 {
-    for( int i = 0; i < mi_level; i++ )
+    for( size_t i = 0; i < mi_level; i++ )
     {
         if( m_el[i] && m_el[i] == el )
             return true;


=====================================
modules/demux/mkv/Ebml_parser.hpp
=====================================
@@ -56,12 +56,12 @@ class EbmlParser
 
     demux_t     *p_demux;
     matroska_iostream_c  *m_es;
-    int          mi_level;
+    size_t       mi_level;
     EbmlElement *m_el[M_EL_MAXSIZE];
 
     EbmlElement *m_got;
 
-    int          mi_user_level;
+    size_t       mi_user_level;
     bool         mb_keep;
     /* Allow dummy/unknown EBML elements */
     bool         mb_dummy;



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/c5a0f9f52e00c5b7379181416b9c651c3fb0c8c2...1e4088406663104e6ea810b1b30ec32f3db8e550

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/c5a0f9f52e00c5b7379181416b9c651c3fb0c8c2...1e4088406663104e6ea810b1b30ec32f3db8e550
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list