@@ -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