From 83f64f76c980edcafe4fcd17d6c9d658e4a7af01 Mon Sep 17 00:00:00 2001 From: coco875 Date: Mon, 22 Dec 2025 18:06:09 +0100 Subject: avoid course goes beyond limit --- src/factories/mk64/CourseVtx.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/factories/mk64/CourseVtx.cpp b/src/factories/mk64/CourseVtx.cpp index a302121..d41c8e0 100644 --- a/src/factories/mk64/CourseVtx.cpp +++ b/src/factories/mk64/CourseVtx.cpp @@ -78,13 +78,16 @@ ExportResult MK64::CourseVtxBinaryExporter::Export(std::ostream &write, std::sha std::optional> MK64::CourseVtxFactory::parse(std::vector& buffer, YAML::Node& node) { auto count = GetSafeNode(node, "count"); - auto [_, segment] = Decompressor::AutoDecode(node, buffer); - LUS::BinaryReader reader(segment.data, count * sizeof(CourseVtx)); + auto [_, segment] = Decompressor::AutoDecode(node, buffer, count * sizeof(CourseVtx)); + LUS::BinaryReader reader(segment.data, segment.size); + + // Limit count to actual available vertices in the decompressed data + auto actualCount = std::min(count, segment.size / sizeof(CourseVtx)); reader.SetEndianness(Torch::Endianness::Big); std::vector vertices; - for(size_t i = 0; i < count; i++) { + for(size_t i = 0; i < actualCount; i++) { auto x = reader.ReadInt16(); auto y = reader.ReadInt16(); auto z = reader.ReadInt16(); -- cgit v1.2.3