From 85da8f68330b2a145ffd0991c5dabce8d41d5ac1 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Thu, 9 Jul 2026 12:16:33 +0300 Subject: [PATCH 1/2] geometry: clean up imOut if operation fails --- src/_imaging.c | 58 +++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/src/_imaging.c b/src/_imaging.c index 897e718e30a..fa757fd9f0f 100644 --- a/src/_imaging.c +++ b/src/_imaging.c @@ -2187,30 +2187,40 @@ _transpose(ImagingObject *self, PyObject *args) { return NULL; } - if (imOut) { - switch (op) { - case 0: - (void)ImagingFlipLeftRight(imOut, imIn); - break; - case 1: - (void)ImagingFlipTopBottom(imOut, imIn); - break; - case 2: - (void)ImagingRotate90(imOut, imIn); - break; - case 3: - (void)ImagingRotate180(imOut, imIn); - break; - case 4: - (void)ImagingRotate270(imOut, imIn); - break; - case 5: - (void)ImagingTranspose(imOut, imIn); - break; - case 6: - (void)ImagingTransverse(imOut, imIn); - break; - } + if (!imOut) { + return NULL; + } + + Imaging imTemp = NULL; // will be either NULL or imOut after the operation finishes + switch (op) { + case 0: + imTemp = ImagingFlipLeftRight(imOut, imIn); + break; + case 1: + imTemp = ImagingFlipTopBottom(imOut, imIn); + break; + case 2: + imTemp = ImagingRotate90(imOut, imIn); + break; + case 3: + imTemp = ImagingRotate180(imOut, imIn); + break; + case 4: + imTemp = ImagingRotate270(imOut, imIn); + break; + case 5: + imTemp = ImagingTranspose(imOut, imIn); + break; + case 6: + imTemp = ImagingTransverse(imOut, imIn); + break; + default: // Already checked above, but Clang-Tidy insists :) + PyErr_SetString(PyExc_ValueError, "No such transpose operation"); + return NULL; + } + if (!imTemp) { // operation failed and will have set an exception + ImagingDelete(imOut); + return NULL; } return PyImagingNew(imOut); From cca1c22364651d223e3b99574a24802e3bdfc7fd Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Fri, 10 Jul 2026 13:03:54 +0300 Subject: [PATCH 2/2] Update src/_imaging.c Co-authored-by: Andrew Murray <3112309+radarhere@users.noreply.github.com> --- src/_imaging.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_imaging.c b/src/_imaging.c index fa757fd9f0f..9a77e0837bc 100644 --- a/src/_imaging.c +++ b/src/_imaging.c @@ -2214,7 +2214,7 @@ _transpose(ImagingObject *self, PyObject *args) { case 6: imTemp = ImagingTransverse(imOut, imIn); break; - default: // Already checked above, but Clang-Tidy insists :) + default: PyErr_SetString(PyExc_ValueError, "No such transpose operation"); return NULL; }