From b09dc06a41a410d4f630bb7cc4bd687ac0ef4d15 Mon Sep 17 00:00:00 2001 From: mix Date: Sat, 2 May 2026 12:51:46 +0100 Subject: [PATCH] Remove first manual memory allocation in ObjectRepository::SaveObject --- src/openrct2/object/ObjectRepository.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index 5ce7ed55bb..f860721870 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -489,15 +489,16 @@ namespace OpenRCT2 const auto extraBytes = calculateExtraBytesToFixChecksum(realChecksum, entry->checksum); // Create new data blob with appended bytes - size_t newDataSize = dataSize + extraBytes.size(); - uint8_t* newData = Memory::Allocate(newDataSize); - uint8_t* newDataSaltOffset = newData + dataSize; - std::copy_n(static_cast(data), dataSize, newData); - std::copy_n(extraBytes.data(), extraBytes.size(), newDataSaltOffset); + std::vector newData; + newData.reserve(dataSize + extraBytes.size()); + + const auto dataSpan = std::span(static_cast(data), dataSize); + newData.insert(newData.end(), dataSpan.begin(), dataSpan.end()); + newData.insert(newData.end(), extraBytes.begin(), extraBytes.end()); try { - uint32_t newRealChecksum = ObjectCalculateChecksum(entry, newData, newDataSize); + uint32_t newRealChecksum = ObjectCalculateChecksum(entry, newData.data(), newData.size()); if (newRealChecksum != entry->checksum) { Console::Error::WriteLine("CalculateExtraBytesToFixChecksum failed to fix checksum."); @@ -508,13 +509,11 @@ namespace OpenRCT2 else { // Save new data form - SaveObject(path, entry, newData, newDataSize, false); + SaveObject(path, entry, newData.data(), newData.size(), false); } - Memory::Free(newData); } catch (const std::exception&) { - Memory::Free(newData); throw; } return;