summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKacper Michajłow <kasper93@gmail.com>2024-01-28 04:19:36 +0100
committerDudemanguy <random342@airmail.cc>2024-02-15 16:43:37 +0000
commit5e54a871c5e38225a3575c92196b1355f7744f1b (patch)
treeef5551ba4ec28033033e3035f90afb3b2b4c869f
parent4419e5c41b5f979d73b79912833ad1f4ac19dd7a (diff)
downloadmpv-5e54a871c5e38225a3575c92196b1355f7744f1b.tar.bz2
mpv-5e54a871c5e38225a3575c92196b1355f7744f1b.tar.xz
demux_mkv: error if needed compression settings were not found
Mode 3 is header stripping and we need ContentCompSettings to reconstruct the data. Found by fuzzing.
-rw-r--r--demux/demux_mkv.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index 3b37c863ac..50f4c78b25 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -390,6 +390,10 @@ static bstr demux_mkv_decode(struct mp_log *log, mkv_track_t *track,
}
size = dstlen - out_avail;
} else if (enc->comp_algo == 3) {
+ if (enc->comp_settings_len == 0 || !enc->comp_settings) {
+ mp_warn(log, "missing comp_settings, unable to reconstruct the data.\n");
+ goto error;
+ }
dest = talloc_size(track->parser_tmp, size + enc->comp_settings_len);
memcpy(dest, enc->comp_settings, enc->comp_settings_len);
memcpy(dest + enc->comp_settings_len, src, size);