1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-24 15:52:25 +00:00

matroska: fix uninitialized memory accesses with ordered chapters

There is uninitialized memory access if the actual size isn't passed
along. In the worst case, this can cause a source to be loaded against
the uninitialized memory, causing a false count of found versus required
sources, preventing the "Failed to find ordered chapter part" message.
This commit is contained in:
Ben Boeckel 2013-09-26 02:22:06 -04:00 committed by wm4
parent 696a8c5609
commit 828a952c9a
3 changed files with 3 additions and 1 deletions

View File

@ -148,6 +148,7 @@ typedef struct demux_attachment
} demux_attachment_t; } demux_attachment_t;
struct demuxer_params { struct demuxer_params {
int matroska_num_wanted_uids;
unsigned char (*matroska_wanted_uids)[16]; unsigned char (*matroska_wanted_uids)[16];
int matroska_wanted_segment; int matroska_wanted_segment;
bool *matroska_was_valid; bool *matroska_was_valid;

View File

@ -394,7 +394,7 @@ static int demux_mkv_read_info(demuxer_t *demuxer)
unsigned char (*uids)[16] = demuxer->params->matroska_wanted_uids; unsigned char (*uids)[16] = demuxer->params->matroska_wanted_uids;
if (!info.n_segment_uid) if (!info.n_segment_uid)
uids = NULL; uids = NULL;
for (int i = 0; i < MP_TALLOC_ELEMS(uids); i++) { for (int i = 0; i < demuxer->params->matroska_num_wanted_uids; i++) {
if (!memcmp(info.segment_uid.start, uids[i], 16)) if (!memcmp(info.segment_uid.start, uids[i], 16))
goto out; goto out;
} }

View File

@ -155,6 +155,7 @@ static bool check_file_seg(struct MPContext *mpctx, struct demuxer **sources,
{ {
bool was_valid = false; bool was_valid = false;
struct demuxer_params params = { struct demuxer_params params = {
.matroska_num_wanted_uids = num_sources,
.matroska_wanted_uids = uid_map, .matroska_wanted_uids = uid_map,
.matroska_wanted_segment = segment, .matroska_wanted_segment = segment,
.matroska_was_valid = &was_valid, .matroska_was_valid = &was_valid,