From 8bf5957c83a5ad16081f0d944863caa41467e0dd Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Thu, 17 Sep 2026 19:34:14 -0400 Subject: [PATCH] Fix RGBLINK assertion failure when `-s` and `-c` invalidly match (#2109) --- src/gfx/main.cpp | 39 ++++++++++++++++-------------- test/gfx/bad_pal_and_colors.err | 3 +++ test/gfx/bad_pal_and_colors.flags | 1 + test/gfx/bad_pal_and_colors.png | Bin 0 -> 79 bytes 4 files changed, 25 insertions(+), 18 deletions(-) create mode 100644 test/gfx/bad_pal_and_colors.err create mode 100644 test/gfx/bad_pal_and_colors.flags create mode 100644 test/gfx/bad_pal_and_colors.png diff --git a/src/gfx/main.cpp b/src/gfx/main.cpp index 7e5751b5..dac70e03 100644 --- a/src/gfx/main.cpp +++ b/src/gfx/main.cpp @@ -671,24 +671,27 @@ int main(int argc, char *argv[]) { autoOutPath(localOptions.autoPalettes, options.palettes, ".pal"); autoOutPath(localOptions.autoPalmap, options.palmap, ".palmap"); - // Execute deferred pal spec parsing, now that all other params are known - switch (options.palSpecType) { - case Options::NO_SPEC: - case Options::EMBEDDED: - assume(!localOptions.palSpec); - break; - case Options::INLINE: - assume(localOptions.palSpec); - parseInlinePalSpec(localOptions.palSpec->c_str()); - break; - case Options::EXTERNAL: - assume(localOptions.palSpec); - parseExternalPalSpec(localOptions.palSpec->c_str()); - break; - case Options::DMG: - assume(localOptions.palSpec); - parseDmgPalSpec(localOptions.palSpec->c_str()); - break; + // Execute deferred pal spec parsing, now that all other params are known. + // Do not parse pal specs if `options.nbColorsPerPal` is invalid. + if (options.nbColorsPerPal > 0 && options.nbColorsPerPal <= 4) { + switch (options.palSpecType) { + case Options::NO_SPEC: + case Options::EMBEDDED: + assume(!localOptions.palSpec); + break; + case Options::INLINE: + assume(localOptions.palSpec); + parseInlinePalSpec(localOptions.palSpec->c_str()); + break; + case Options::EXTERNAL: + assume(localOptions.palSpec); + parseExternalPalSpec(localOptions.palSpec->c_str()); + break; + case Options::DMG: + assume(localOptions.palSpec); + parseDmgPalSpec(localOptions.palSpec->c_str()); + break; + } } verboseDo(VERB_CONFIG, verboseOutputConfig); diff --git a/test/gfx/bad_pal_and_colors.err b/test/gfx/bad_pal_and_colors.err new file mode 100644 index 00000000..85eff41a --- /dev/null +++ b/test/gfx/bad_pal_and_colors.err @@ -0,0 +1,3 @@ +error: Palette size ('-s') must not exceed 4 +error: 2bpp palettes can only contain 4 colors, not 5 +Conversion aborted after 2 errors diff --git a/test/gfx/bad_pal_and_colors.flags b/test/gfx/bad_pal_and_colors.flags new file mode 100644 index 00000000..7f08773e --- /dev/null +++ b/test/gfx/bad_pal_and_colors.flags @@ -0,0 +1 @@ +-s 5 -c #111,#222,#333,#444,#555 diff --git a/test/gfx/bad_pal_and_colors.png b/test/gfx/bad_pal_and_colors.png new file mode 100644 index 0000000000000000000000000000000000000000..fe5443b800c651eb8aa83dacaf6f76ca2e590263 GIT binary patch literal 79 zcmeAS@N?(olHy`uVBq!ia0vp^93adDBp6m-`S}ehE&{2{_%f4V@KFpriB** b1ell^+9$C8?C$>h8KlzF)z4*}Q$iB}{g)R^ literal 0 HcmV?d00001