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