diff options
| author | coco875 <pereira.jannin@gmail.com> | 2025-12-22 18:06:09 +0100 |
|---|---|---|
| committer | Lywx <kiritodev01@gmail.com> | 2025-12-22 11:21:52 -0600 |
| commit | 83f64f76c980edcafe4fcd17d6c9d658e4a7af01 (patch) | |
| tree | 2d0c74ef91145bec0cc8b4f5b21fddfa2ff6293e /src/factories | |
| parent | d0c1112405a9ff49aa04ff9173b25acd1dde8440 (diff) | |
avoid course goes beyond limit
Diffstat (limited to 'src/factories')
| -rw-r--r-- | src/factories/mk64/CourseVtx.cpp | 9 |
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(); |
