From 63d2e12c2788d1c3c70c52ef2157bd0c126a0557 Mon Sep 17 00:00:00 2001 From: James Alan Nguyen Date: Thu, 12 May 2022 10:55:47 +1000 Subject: [PATCH] Address review comments (missed these) --- src/engine/fileOpsIns.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/engine/fileOpsIns.cpp b/src/engine/fileOpsIns.cpp index c43eb5b3..b26cc67d 100644 --- a/src/engine/fileOpsIns.cpp +++ b/src/engine/fileOpsIns.cpp @@ -1167,7 +1167,7 @@ void DivEngine::loadGYB(SafeReader& reader, std::vector& ret, St uint32_t bankOffset = reader.readI(); uint32_t mapOffset = reader.readI(); - if (reader.size() != fileSize || bankOffset > fileSize || mapOffset > fileSize) { + if (bankOffset > fileSize || mapOffset > fileSize) { lastError = "GYBv3 file appears to have invalid data offsets."; logE("GYBv3 file appears to have invalid data offsets."); } @@ -1177,9 +1177,9 @@ void DivEngine::loadGYB(SafeReader& reader, std::vector& ret, St } uint16_t insCount = reader.readS(); + size_t patchPosOffset = reader.tell(); for (int i = 0; i < insCount; ++i) { - reader.tell(); // skip patchPosOffset - reader.readS(); // skip patchSize + uint16_t patchSize = reader.readS(); readInstrument(reader, true); // Additional data @@ -1196,6 +1196,11 @@ void DivEngine::loadGYB(SafeReader& reader, std::vector& ret, St // Instrument Name readInstrumentName(reader, insList[i]); + + // Retrieve next patch + if (!reader.seek(patchPosOffset + patchSize, SEEK_SET)) { + throw EndOfFileException(&reader, patchPosOffset + patchSize); + } } } reader.seek(0, SEEK_END);