From 439a7a1828d377994f69cbc4b625a401856e915f Mon Sep 17 00:00:00 2001 From: Rangi Date: Sat, 12 Sep 2026 11:50:47 -0400 Subject: [PATCH] Fix reversing multiple palettes with fewer than 4 colors per palette Fixes #2073 --- src/gfx/reverse.cpp | 13 +++++++------ test/gfx/reverse_multi_palette.2bpp | Bin 0 -> 32 bytes test/gfx/reverse_multi_palette.attrmap | Bin 0 -> 3 bytes test/gfx/reverse_multi_palette.flags | 5 +++++ test/gfx/reverse_multi_palette.pal | Bin 0 -> 8 bytes test/gfx/reverse_multi_palette.tilemap | Bin 0 -> 3 bytes 6 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 test/gfx/reverse_multi_palette.2bpp create mode 100644 test/gfx/reverse_multi_palette.attrmap create mode 100644 test/gfx/reverse_multi_palette.flags create mode 100644 test/gfx/reverse_multi_palette.pal create mode 100644 test/gfx/reverse_multi_palette.tilemap diff --git a/src/gfx/reverse.cpp b/src/gfx/reverse.cpp index f0e3e7d6..9d6a6c35 100644 --- a/src/gfx/reverse.cpp +++ b/src/gfx/reverse.cpp @@ -217,16 +217,17 @@ void reverse() { palettes.clear(); std::array buf; // max 4 colors - assume(buf.size() >= sizeof(uint16_t) * options.nbColorsPerPal); + size_t const palSize = sizeof(uint16_t) * options.nbColorsPerPal; + assume(buf.size() >= palSize); for (;;) { - if (size_t nbRead = file->sgetn(reinterpret_cast(buf.data()), buf.size()); + if (size_t nbRead = file->sgetn(reinterpret_cast(buf.data()), palSize); nbRead == 0) { break; - } else if (nbRead != sizeof(uint16_t) * options.nbColorsPerPal) { + } else if (nbRead != palSize) { fatal( - "Palette data size (%zu) is not a multiple of %zu bytes\n", - palettes.size() * buf.size() + nbRead, - buf.size() + "Palette data size (%zu) is not a multiple of %zu bytes", + palettes.size() * palSize + nbRead, + palSize ); } // Expand the colors diff --git a/test/gfx/reverse_multi_palette.2bpp b/test/gfx/reverse_multi_palette.2bpp new file mode 100644 index 0000000000000000000000000000000000000000..c4b4f6c428512c5e3b3d96289bff51fd07206a0b GIT binary patch literal 32 OcmZQzKn4F9P$2+E*a!Il literal 0 HcmV?d00001 diff --git a/test/gfx/reverse_multi_palette.attrmap b/test/gfx/reverse_multi_palette.attrmap new file mode 100644 index 0000000000000000000000000000000000000000..180cf4bf96a427be11dc33679b684a52de644751 GIT binary patch literal 3 KcmZQzWB>pF1pop7 literal 0 HcmV?d00001 diff --git a/test/gfx/reverse_multi_palette.flags b/test/gfx/reverse_multi_palette.flags new file mode 100644 index 00000000..fb08b10f --- /dev/null +++ b/test/gfx/reverse_multi_palette.flags @@ -0,0 +1,5 @@ +-s 2 +-u +-t reverse_multi_palette.tilemap +-a reverse_multi_palette.attrmap +-p reverse_multi_palette.pal diff --git a/test/gfx/reverse_multi_palette.pal b/test/gfx/reverse_multi_palette.pal new file mode 100644 index 0000000000000000000000000000000000000000..ce75044dfd85549aed7c3c6157e3dcb330939177 GIT binary patch literal 8 Pcmb1VV5oV({Qo}y3GxGd literal 0 HcmV?d00001 diff --git a/test/gfx/reverse_multi_palette.tilemap b/test/gfx/reverse_multi_palette.tilemap new file mode 100644 index 0000000000000000000000000000000000000000..fa37ca9bf9d6b25c9ce0d8fd77695970b595e6fb GIT binary patch literal 3 KcmZQzU<3dF1ONg6 literal 0 HcmV?d00001