[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