Skip to content

Commit 85da8f6

Browse files
committed
geometry: clean up imOut if operation fails
1 parent ba06125 commit 85da8f6

1 file changed

Lines changed: 34 additions & 24 deletions

File tree

src/_imaging.c

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2187,30 +2187,40 @@ _transpose(ImagingObject *self, PyObject *args) {
21872187
return NULL;
21882188
}
21892189

2190-
if (imOut) {
2191-
switch (op) {
2192-
case 0:
2193-
(void)ImagingFlipLeftRight(imOut, imIn);
2194-
break;
2195-
case 1:
2196-
(void)ImagingFlipTopBottom(imOut, imIn);
2197-
break;
2198-
case 2:
2199-
(void)ImagingRotate90(imOut, imIn);
2200-
break;
2201-
case 3:
2202-
(void)ImagingRotate180(imOut, imIn);
2203-
break;
2204-
case 4:
2205-
(void)ImagingRotate270(imOut, imIn);
2206-
break;
2207-
case 5:
2208-
(void)ImagingTranspose(imOut, imIn);
2209-
break;
2210-
case 6:
2211-
(void)ImagingTransverse(imOut, imIn);
2212-
break;
2213-
}
2190+
if (!imOut) {
2191+
return NULL;
2192+
}
2193+
2194+
Imaging imTemp = NULL; // will be either NULL or imOut after the operation finishes
2195+
switch (op) {
2196+
case 0:
2197+
imTemp = ImagingFlipLeftRight(imOut, imIn);
2198+
break;
2199+
case 1:
2200+
imTemp = ImagingFlipTopBottom(imOut, imIn);
2201+
break;
2202+
case 2:
2203+
imTemp = ImagingRotate90(imOut, imIn);
2204+
break;
2205+
case 3:
2206+
imTemp = ImagingRotate180(imOut, imIn);
2207+
break;
2208+
case 4:
2209+
imTemp = ImagingRotate270(imOut, imIn);
2210+
break;
2211+
case 5:
2212+
imTemp = ImagingTranspose(imOut, imIn);
2213+
break;
2214+
case 6:
2215+
imTemp = ImagingTransverse(imOut, imIn);
2216+
break;
2217+
default: // Already checked above, but Clang-Tidy insists :)
2218+
PyErr_SetString(PyExc_ValueError, "No such transpose operation");
2219+
return NULL;
2220+
}
2221+
if (!imTemp) { // operation failed and will have set an exception
2222+
ImagingDelete(imOut);
2223+
return NULL;
22142224
}
22152225

22162226
return PyImagingNew(imOut);

0 commit comments

Comments
 (0)