Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
d51fc15b by Steve Lhomme at 2026-01-08T19:51:54+00:00
demux: mkv: fix PrivateTrackData not checking errors properly

Cook_PrivateTrackData::Init() was always returning the same value on error or 
success.

Bug introduced in 7cac9cbe051287bab6763385fdf66a8039b813b8.

Fixes #29523

- - - - -


4 changed files:

- modules/demux/mkv/matroska_segment_parse.cpp
- modules/demux/mkv/mkv.hpp
- modules/demux/mkv/util.cpp
- modules/demux/mkv/util.hpp


Changes:

=====================================
modules/demux/mkv/matroska_segment_parse.cpp
=====================================
@@ -2162,7 +2162,7 @@ bool matroska_segment_c::TrackInit( mkv_track_t * p_tk )
             if( unlikely( !p_realaudio ) )
                 throw std::runtime_error ("Cook_PrivateTrackData is NULL when 
handling A_REAL/28_8");
 
-            if( unlikely( p_realaudio->Init() ) )
+            if( unlikely( !p_realaudio->Init() ) )
                 throw std::runtime_error ("Cook_PrivateTrackData::Init() 
failed when handling A_REAL/28_8");
 
             if (i_codec == VLC_CODEC_COOK || i_codec == VLC_CODEC_ATRAC3)


=====================================
modules/demux/mkv/mkv.hpp
=====================================
@@ -185,7 +185,7 @@ class PrivateTrackData
 {
 public:
     virtual ~PrivateTrackData() {}
-    virtual int32_t Init() { return 0; }
+    virtual bool Init() { return true; }
 };
 
 class mkv_track_t


=====================================
modules/demux/mkv/util.cpp
=====================================
@@ -499,7 +499,7 @@ struct real_audio_private_v5
     uint16_t channels;
 };
 
-int32_t Cook_PrivateTrackData::Init()
+bool Cook_PrivateTrackData::Init()
 {
     // real_audio_private
     bytes.skip(4);                      // fourcc
@@ -518,7 +518,7 @@ int32_t Cook_PrivateTrackData::Init()
     bytes.skip(2);                      // unknown5
 
     if ( i_subpacket_size == 0 )
-        return 0;
+        return false;
 
     if( version == 4 )
     {
@@ -539,14 +539,14 @@ int32_t Cook_PrivateTrackData::Init()
         i_channels      = bytes.GetBE16(); // channels
     }
     else
-        return 0;
+        return false;
     if (bytes.hasErrors())
-        return 0;
+        return false;
 
     size_t i_subpackets = (size_t) i_sub_packet_h * (size_t) i_frame_size / 
(size_t) i_subpacket_size;
     p_subpackets.resize(i_subpackets);
 
-    return 0;
+    return true;
 }
 
 Cook_PrivateTrackData::~Cook_PrivateTrackData()


=====================================
modules/demux/mkv/util.hpp
=====================================
@@ -100,7 +100,7 @@ public:
     Cook_PrivateTrackData(const uint8_t *reader, size_t reader_len):
         bytes(reader, reader_len) {}
     ~Cook_PrivateTrackData();
-    int32_t Init();
+    bool Init() override;
 
     uint32_t coded_frame_size;
     uint16_t i_sub_packet_h;



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

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


VideoLAN code repository instance
_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to