From 372631201ac8899339eb225dfb73f59ca785f555 Mon Sep 17 00:00:00 2001 From: Robert Crossfield Date: Sun, 24 May 2026 13:06:18 +1000 Subject: [PATCH] Fix RNC failure handling and palette bounds compile issue --- Source/Amiga/Graphics_Amiga.cpp | 3 ++- Source/Resources.cpp | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Source/Amiga/Graphics_Amiga.cpp b/Source/Amiga/Graphics_Amiga.cpp index e28411f3..75f7209e 100644 --- a/Source/Amiga/Graphics_Amiga.cpp +++ b/Source/Amiga/Graphics_Amiga.cpp @@ -628,7 +628,8 @@ sImage cGraphics_Amiga::DecodeIFF(const std::string& pFilename) { d0 = (int16)d0; Final += d0; - if (i < std::size(Result.mPalette)) { + const size_t PaletteCapacity = sizeof(Result.mPalette) / sizeof(Result.mPalette[0]); + if (i < PaletteCapacity) { Result.mPalette[i].mRed = ((Final >> 8) & 0xF) << 2; Result.mPalette[i].mGreen = ((Final >> 4) & 0xF) << 2; Result.mPalette[i].mBlue = ((Final >> 0) & 0xF) << 2; diff --git a/Source/Resources.cpp b/Source/Resources.cpp index acf7cb24..be811e55 100644 --- a/Source/Resources.cpp +++ b/Source/Resources.cpp @@ -40,6 +40,7 @@ tSharedBuffer cResources::fileGet( std::string pFilename ) { tSharedBuffer cResources::fileDeRNC(tSharedBuffer pBuffer) { constexpr uint32 RNCHeaderSize = 18; constexpr uint32 MaxUnpackedSize = 64 * 1024 * 1024; + const auto InvalidRNC = []() { return std::make_shared>(); }; if (pBuffer->size() < RNCHeaderSize) return pBuffer; @@ -52,14 +53,14 @@ tSharedBuffer cResources::fileDeRNC(tSharedBuffer pBuffer) { uint32 PackedSize = readBEDWord(pBuffer->data() + 8); if ((PackedSize > (pBuffer->size() - RNCHeaderSize)) || !Size || (Size > MaxUnpackedSize)) - return pBuffer; + return InvalidRNC(); auto Unpacked = std::make_shared>(); Unpacked->resize(Size); long Result = rnc_unpack(pBuffer->data(), Unpacked->data()); if (Result != static_cast(Size)) - return pBuffer; + return InvalidRNC(); return Unpacked; }