[vlc-commits] [Git][videolan/vlc][master] 7 commits: demux: mkv: add a way to validate a chapter_translation_c

Steve Lhomme (@robUx4) gitlab at videolan.org
Fri Sep 26 14:27:47 UTC 2025



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
86200a59 by Steve Lhomme at 2025-09-26T14:13:29+00:00
demux: mkv: add a way to validate a chapter_translation_c

- - - - -
d90a8504 by Steve Lhomme at 2025-09-26T14:13:29+00:00
demux: mkv: on keep chapter valid chapter_translation_c

- - - - -
40c02572 by Steve Lhomme at 2025-09-26T14:13:29+00:00
demux: mkv: avoid leaking block on error

- - - - -
59f5eb9a by Steve Lhomme at 2025-09-26T14:13:29+00:00
demux: mkv: avoid leaking string on overwriting

- - - - -
e323603c by Steve Lhomme at 2025-09-26T14:13:29+00:00
demux: mkv: avoid leaking KaxChapterTranslateID on overwriting

- - - - -
ed4a4b30 by Steve Lhomme at 2025-09-26T14:13:29+00:00
demux: mkv: move local classes into tags containers

- - - - -
520ccf89 by Steve Lhomme at 2025-09-26T14:13:29+00:00
demux: mkv: move local updated range into ranges

- - - - -


6 changed files:

- modules/demux/mkv/chapters.hpp
- modules/demux/mkv/demux.cpp
- modules/demux/mkv/matroska_segment.cpp
- modules/demux/mkv/matroska_segment_parse.cpp
- modules/demux/mkv/matroska_segment_seeker.cpp
- modules/demux/mkv/util.cpp


Changes:

=====================================
modules/demux/mkv/chapters.hpp
=====================================
@@ -29,6 +29,7 @@
 #include "mkv.hpp"
 
 #include <optional>
+#include <limits>
 
 namespace mkv {
 
@@ -36,7 +37,8 @@ class chapter_translation_c
 {
 public:
     chapter_translation_c()
-        :p_translated(NULL)
+        :p_translated(nullptr)
+        ,codec_id(std::numeric_limits<unsigned int>::max())
     {}
 
     ~chapter_translation_c()
@@ -44,6 +46,11 @@ public:
         delete p_translated;
     }
 
+    constexpr bool isValid() const {
+        return p_translated != nullptr &&
+               codec_id != std::numeric_limits<unsigned int>::max();
+    }
+
     KaxChapterTranslateID  *p_translated;
     unsigned int           codec_id;
     std::vector<uint64_t>  editions;


=====================================
modules/demux/mkv/demux.cpp
=====================================
@@ -242,6 +242,7 @@ bool demux_sys_t::PreloadLinked()
                                     if ( st.tag_name == "TITLE" )
                                     {
                                         msg_Dbg( &demuxer, "Using title \"%s\" from tag for edition %" PRIu64, st.value.c_str (), i_ed_uid );
+                                        free(p_title->psz_name);
                                         p_title->psz_name = strdup( st.value.c_str () );
                                         break;
                                     }


=====================================
modules/demux/mkv/matroska_segment.cpp
=====================================
@@ -310,7 +310,7 @@ bool matroska_segment_c::ParseSimpleTags( SimpleTag* pout_simple, KaxTagSimple *
                           // the SimpleTag is valid if ParseSimpleTags returns `true`
 
             if (vars.obj->ParseSimpleTags( &st, &simple, vars.target_type ))
-              vars.out.sub_tags.push_back( st );
+              vars.out.sub_tags.push_back( std::move(st) );
         }
     };
     SimpleTagHandler::Dispatcher().iterate( tag->begin(), tag->end(), &payload );
@@ -421,7 +421,7 @@ void matroska_segment_c::LoadTags( KaxTags *tags_ )
                     SimpleTag simple;
 
                     if (vars.obj->ParseSimpleTags( &simple, &entry, vars.target_type ))
-                        vars.tag.simple_tags.push_back( simple );
+                        vars.tag.simple_tags.push_back( std::move(simple) );
                 }
                 E_CASE_DEFAULT( el )
                 {
@@ -430,7 +430,7 @@ void matroska_segment_c::LoadTags( KaxTags *tags_ )
             };
 
             TagHandler::Dispatcher().iterate( entry.begin(), entry.end(), &payload );
-            vars.obj->tags.push_back(tag);
+            vars.obj->tags.push_back(std::move(tag));
         }
         E_CASE_DEFAULT( el )
         {


=====================================
modules/demux/mkv/matroska_segment_parse.cpp
=====================================
@@ -1268,6 +1268,7 @@ void matroska_segment_c::ParseInfo( KaxInfo *info )
                 }
                 E_CASE( KaxChapterTranslateID, translated_id )
                 {
+                    delete vars->p_translated;
                     vars->p_translated = new KaxChapterTranslateID( translated_id );
                 }
             };
@@ -1282,7 +1283,10 @@ void matroska_segment_c::ParseInfo( KaxInfo *info )
                     trans.begin(), trans.end(), &p_translate
                 );
 
-                vars.obj->translations.push_back( p_translate );
+                if (p_translate->isValid())
+                    vars.obj->translations.push_back( p_translate );
+                else
+                    delete p_translate;
             }
             catch(...)
             {


=====================================
modules/demux/mkv/matroska_segment_seeker.cpp
=====================================
@@ -437,7 +437,7 @@ SegmentSeeker::mark_range_as_searched( Range data )
             merged.push_back( *it );
         }
 
-        _ranges_searched = merged;
+        _ranges_searched = std::move(merged);
     }
 }
 


=====================================
modules/demux/mkv/util.cpp
=====================================
@@ -206,11 +206,11 @@ void handle_real_audio(demux_t * p_demux, mkv_track_t * p_tk, block_t * p_blk, v
             if( i_index >= p_sys->i_subpackets )
                 return;
 
-            block_t *p_block = block_Alloc( p_sys->i_subpacket_size );
-            if( !p_block )
+            if( size < p_sys->i_subpacket_size )
                 return;
 
-            if( size < p_sys->i_subpacket_size )
+            block_t *p_block = block_Alloc( p_sys->i_subpacket_size );
+            if( !p_block )
                 return;
 
             memcpy( p_block->p_buffer, p_frame, p_sys->i_subpacket_size );



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/9230f8b65a4d8c53855e42aa2a80bee24e767d7e...520ccf8912d862f7476d787de41ef362b6a1b6e5

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/9230f8b65a4d8c53855e42aa2a80bee24e767d7e...520ccf8912d862f7476d787de41ef362b6a1b6e5
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