[vlc-commits] [Git][videolan/vlc][master] 2 commits: demux: mkv: fix uncaught throw when reading Cluster first elements

Steve Lhomme (@robUx4) gitlab at videolan.org
Wed Sep 17 10:38:22 UTC 2025



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
6c5297b7 by Steve Lhomme at 2025-09-17T08:38:44+00:00
demux: mkv: fix uncaught throw when reading Cluster first elements

Fixes https://code.videolan.org/videolan/vlc/-/issues/29288

- - - - -
5bdb5a59 by Steve Lhomme at 2025-09-17T08:38:44+00:00
demux: mkv: fix uncaught throw when reading Block data

- - - - -


2 changed files:

- modules/demux/mkv/matroska_segment.cpp
- modules/demux/mkv/matroska_segment_seeker.cpp


Changes:

=====================================
modules/demux/mkv/matroska_segment.cpp
=====================================
@@ -1243,7 +1243,11 @@ int matroska_segment_c::BlockGet( KaxBlock * & pp_block, KaxSimpleBlock * & pp_s
                 return;
             }
 
-            filepos_t read = ksblock.ReadData( vars.obj->es.I_O() );
+            filepos_t read = 0;
+            try {
+                read = ksblock.ReadData( vars.obj->es.I_O() );
+            } catch(...) {
+            }
             if (read == 0 && ksblock.GetSize() != 0) {
                 msg_Err( vars.p_demuxer,"Error while reading %s",  EBML_NAME(&ksblock) );
                 return;
@@ -1267,7 +1271,11 @@ int matroska_segment_c::BlockGet( KaxBlock * & pp_block, KaxSimpleBlock * & pp_s
 
         E_CASE( KaxBlock, kblock )
         {
-            filepos_t read = kblock.ReadData( vars.obj->es.I_O() );
+            filepos_t read = 0;
+            try {
+                read = kblock.ReadData( vars.obj->es.I_O() );
+            } catch(...) {
+            }
             if (unlikely(read == 0) && kblock.GetSize() != 0) {
                 msg_Err( vars.p_demuxer,"Error while reading %s",  EBML_NAME(&kblock) );
                 return;


=====================================
modules/demux/mkv/matroska_segment_seeker.cpp
=====================================
@@ -521,16 +521,22 @@ SegmentSeeker::mkv_jump_to( matroska_segment_c& ms, fptr_t fpos )
 
     while( EbmlElement * el = ms.ep.Get() )
     {
-        if( MKV_CHECKED_PTR_DECL( p_tc, KaxClusterTimestamp, el ) )
-        {
-            p_tc->ReadData( ms.es.I_O(), SCOPE_ALL_DATA );
-            ms.cluster->InitTimestamp( static_cast<uint64_t>( *p_tc ), ms.i_timescale );
-            add_cluster(ms.cluster);
-            break;
+        try {
+            if( MKV_CHECKED_PTR_DECL( p_tc, KaxClusterTimestamp, el ) )
+            {
+                p_tc->ReadData( ms.es.I_O(), SCOPE_ALL_DATA );
+                ms.cluster->InitTimestamp( static_cast<uint64_t>( *p_tc ), ms.i_timescale );
+                add_cluster(ms.cluster);
+                break;
+            }
+            else if( MKV_CHECKED_PTR_DECL( crc, EbmlCrc32, el ) )
+            {
+                crc->ReadData( ms.es.I_O(), SCOPE_ALL_DATA ); /* avoid a skip that may fail */
+            }
         }
-        else if( MKV_CHECKED_PTR_DECL( crc, EbmlCrc32, el ) )
+        catch(...)
         {
-            crc->ReadData( ms.es.I_O(), SCOPE_ALL_DATA ); /* avoid a skip that may fail */
+            msg_Err( &ms.sys.demuxer,"Error while reading %s",  EBML_NAME(el) );
         }
     }
 



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/223e87ef2623247ace83f281b72f6af9305a22da...5bdb5a590476886a009e7b3657f7956e368230b9

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/223e87ef2623247ace83f281b72f6af9305a22da...5bdb5a590476886a009e7b3657f7956e368230b9
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