diff --git a/Tests/test_image.py b/Tests/test_image.py index 81bd4729926..141dd960f15 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -1122,6 +1122,14 @@ def test_constants(self) -> None: for name in enum.__members__: assert getattr(Image, name) == enum[name] + def test_decoder_setimage_once(self) -> None: + im = Image.new("L", (1, 1)) + decoder = Image._getdecoder("L", "raw", "L") + + decoder.setimage(im.im, None) + with pytest.raises(ValueError, match="decoder already has an image"): + decoder.setimage(im.im, None) + @pytest.mark.parametrize( "path", [ diff --git a/src/decode.c b/src/decode.c index 5c6c250987d..5055ebb03fc 100644 --- a/src/decode.c +++ b/src/decode.c @@ -204,6 +204,10 @@ _setimage(ImagingDecoderObject *decoder, PyObject *args) { return NULL; } + if (decoder->im != NULL) { + PyErr_SetString(PyExc_ValueError, "decoder already has an image"); + return NULL; + } decoder->im = im; state = &decoder->state;