[vlc-commits] [Git][videolan/vlc][master] demux: mkv: reset non-matching cluster in mkv_jump_to()

Jean-Baptiste Kempf (@jbk) gitlab at videolan.org
Sun Mar 22 13:37:11 UTC 2026



Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC


Commits:
909f6af5 by Steve Lhomme at 2026-03-22T13:41:11+01:00
demux: mkv: reset non-matching cluster in mkv_jump_to()

Consecutive to 804bb1183da64866704d2aef79003af59784813b the cluster we kept
locally may be deleted.
We check whether the cluster if it matches the jump we want before looking
for the next one.
And we reset the non-matching cluster pointer which will be released in the next loop.

Fixes #29545

- - - - -


1 changed file:

- modules/demux/mkv/matroska_segment_seeker.cpp


Changes:

=====================================
modules/demux/mkv/matroska_segment_seeker.cpp
=====================================
@@ -477,7 +477,6 @@ SegmentSeeker::mkv_jump_to( matroska_segment_c& ms, fptr_t fpos )
 
     if ( fpos != std::numeric_limits<SegmentSeeker::fptr_t>::max() )
     {
-        ms.cluster = NULL;
         if ( !_cluster_positions.empty() )
         {
             cluster_positions_t::iterator cluster_it = greatest_lower_bound(
@@ -488,9 +487,9 @@ SegmentSeeker::mkv_jump_to( matroska_segment_c& ms, fptr_t fpos )
             ms.ep.reconstruct( &ms.es, ms.segment, &ms.sys.demuxer );
         }
 
-        while( ms.cluster == NULL || (
-              ms.cluster->IsFiniteSize() && ms.cluster->GetEndPosition() < fpos ) )
+        for(;;)
         {
+            ms.cluster = NULL;
             EbmlElement *el = ms.ep.Get();
             if( el == nullptr )
             {
@@ -507,6 +506,9 @@ SegmentSeeker::mkv_jump_to( matroska_segment_c& ms, fptr_t fpos )
             add_cluster_position( i_cluster_pos );
 
             mark_range_as_searched( Range( i_cluster_pos, ms.es.I_O().getFilePointer() ) );
+
+            if ( !ms.cluster->IsFiniteSize() || ms.cluster->GetEndPosition() >= fpos)
+                break;
         }
     }
     else if (ms.cluster != NULL)



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/909f6af57fa6e1a2c5d1be8a06d5d84ada337cf2

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/909f6af57fa6e1a2c5d1be8a06d5d84ada337cf2
You're receiving this email because of your account on code.videolan.org.




More information about the vlc-commits mailing list