summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcoco875 <pereira.jannin@gmail.com>2025-12-22 18:06:09 +0100
committerLywx <kiritodev01@gmail.com>2025-12-22 11:21:52 -0600
commit83f64f76c980edcafe4fcd17d6c9d658e4a7af01 (patch)
tree2d0c74ef91145bec0cc8b4f5b21fddfa2ff6293e /src
parentd0c1112405a9ff49aa04ff9173b25acd1dde8440 (diff)
avoid course goes beyond limit
Diffstat (limited to 'src')
-rw-r--r--src/factories/mk64/CourseVtx.cpp9
1 files changed, 6 insertions, 3 deletions
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<std::shared_ptr<IParsedData>> MK64::CourseVtxFactory::parse(std::vector<uint8_t>& buffer, YAML::Node& node) {
auto count = GetSafeNode<size_t>(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<VtxRaw> 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();