diff --git a/Source/Amiga/Graphics_Amiga2.cpp b/Source/Amiga/Graphics_Amiga2.cpp index 3038c1e6..3e1cdf64 100644 --- a/Source/Amiga/Graphics_Amiga2.cpp +++ b/Source/Amiga/Graphics_Amiga2.cpp @@ -98,10 +98,11 @@ tSharedBuffer cGraphics_Amiga2::GetPalette(const std::string pFilename) { auto Palette = g_Resource->fileGet(Filename); auto a0 = Palette->data(); - for (; a0 < Palette->data() + Palette->size(); ++a0) { + auto a0End = Palette->data() + Palette->size(); + for (; a0 + 2 < a0End; a0 += 3) { - uint16 d0 = *a0++; - uint16 d1 = *a0++; + uint16 d0 = a0[0]; + uint16 d1 = a0[1]; d0 &= 0xF0; d0 <<= 4; @@ -109,7 +110,7 @@ tSharedBuffer cGraphics_Amiga2::GetPalette(const std::string pFilename) { d1 &= 0xF0; d0 |= d1; - d1 = *a0; + d1 = a0[2]; d1 &= 0xF0; d1 >>= 4; d0 |= d1; diff --git a/Source/Graphics.hpp b/Source/Graphics.hpp index 74204132..9fa95a87 100644 --- a/Source/Graphics.hpp +++ b/Source/Graphics.hpp @@ -94,7 +94,13 @@ struct sImage { uint16 color; - for (size_t ColorID = pStartColorID; ColorID < pStartColorID + pCount; ColorID++) { + if (pStartColorID >= 256) + return; + + const size_t MaxColors = 256 - pStartColorID; + const size_t PaletteCount = std::min(pCount, MaxColors); + + for (size_t ColorID = pStartColorID; ColorID < pStartColorID + PaletteCount; ColorID++) { // Get the next color codes color = readBEWord(pFrom);