diff --git a/Tests/test_image_quantize.py b/Tests/test_image_quantize.py index 8876285605a..ec1c13977d1 100644 --- a/Tests/test_image_quantize.py +++ b/Tests/test_image_quantize.py @@ -179,3 +179,14 @@ def test_small_palette() -> None: quantized_colors = im.getcolors() assert quantized_colors is not None assert len(quantized_colors) == 2 + + +def test_empty_palette() -> None: + im = hopper() + + p = Image.new("P", (1, 1)) + assert p.palette is not None + assert p.palette.palette == b"" + + with pytest.raises(ValueError, match="empty palette"): + im.quantize(palette=p) diff --git a/src/libImaging/Convert.c b/src/libImaging/Convert.c index b2b7ff26a22..5c3ec61c75b 100644 --- a/src/libImaging/Convert.c +++ b/src/libImaging/Convert.c @@ -1149,7 +1149,11 @@ topalette( alpha = mode == IMAGING_MODE_PA; - if (palette == NULL) { + if (palette != NULL) { + if (palette->size == 0) { + return (Imaging)ImagingError_ValueError("empty palette"); + } + } else { /* FIXME: make user configurable */ if (imIn->bands == 1) { palette = ImagingPaletteNew(IMAGING_MODE_RGB); diff --git a/src/libImaging/Palette.c b/src/libImaging/Palette.c index b2dacf656b5..ceb69d3dc6b 100644 --- a/src/libImaging/Palette.c +++ b/src/libImaging/Palette.c @@ -211,6 +211,7 @@ ImagingPaletteCacheUpdate(ImagingPalette palette, int r, int g, int b) { for (i = 0; i < BOXVOLUME; i++) { d[i] = (unsigned int)~0; + c[i] = 0; } for (i = 0; i < palette->size; i++) {