Skip to content

Commit 3726312

Browse files
committed
Fix RNC failure handling and palette bounds compile issue
1 parent fa63fbd commit 3726312

2 files changed

Lines changed: 5 additions & 3 deletions

File tree

Source/Amiga/Graphics_Amiga.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,8 @@ sImage cGraphics_Amiga::DecodeIFF(const std::string& pFilename) {
628628
d0 = (int16)d0;
629629
Final += d0;
630630

631-
if (i < std::size(Result.mPalette)) {
631+
const size_t PaletteCapacity = sizeof(Result.mPalette) / sizeof(Result.mPalette[0]);
632+
if (i < PaletteCapacity) {
632633
Result.mPalette[i].mRed = ((Final >> 8) & 0xF) << 2;
633634
Result.mPalette[i].mGreen = ((Final >> 4) & 0xF) << 2;
634635
Result.mPalette[i].mBlue = ((Final >> 0) & 0xF) << 2;

Source/Resources.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ tSharedBuffer cResources::fileGet( std::string pFilename ) {
4040
tSharedBuffer cResources::fileDeRNC(tSharedBuffer pBuffer) {
4141
constexpr uint32 RNCHeaderSize = 18;
4242
constexpr uint32 MaxUnpackedSize = 64 * 1024 * 1024;
43+
const auto InvalidRNC = []() { return std::make_shared<std::vector<uint8>>(); };
4344

4445
if (pBuffer->size() < RNCHeaderSize)
4546
return pBuffer;
@@ -52,14 +53,14 @@ tSharedBuffer cResources::fileDeRNC(tSharedBuffer pBuffer) {
5253
uint32 PackedSize = readBEDWord(pBuffer->data() + 8);
5354

5455
if ((PackedSize > (pBuffer->size() - RNCHeaderSize)) || !Size || (Size > MaxUnpackedSize))
55-
return pBuffer;
56+
return InvalidRNC();
5657

5758
auto Unpacked = std::make_shared<std::vector<uint8>>();
5859
Unpacked->resize(Size);
5960

6061
long Result = rnc_unpack(pBuffer->data(), Unpacked->data());
6162
if (Result != static_cast<long>(Size))
62-
return pBuffer;
63+
return InvalidRNC();
6364

6465
return Unpacked;
6566
}

0 commit comments

Comments
 (0)