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; }