summaryrefslogtreecommitdiff
path: root/src/factories/mk64/CourseVtx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/factories/mk64/CourseVtx.cpp')
-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();