@@ -2192,30 +2192,40 @@ _transpose(ImagingObject *self, PyObject *args) {
21922192 return NULL ;
21932193 }
21942194
2195- if (imOut ) {
2196- switch (op ) {
2197- case 0 :
2198- (void )ImagingFlipLeftRight (imOut , imIn );
2199- break ;
2200- case 1 :
2201- (void )ImagingFlipTopBottom (imOut , imIn );
2202- break ;
2203- case 2 :
2204- (void )ImagingRotate90 (imOut , imIn );
2205- break ;
2206- case 3 :
2207- (void )ImagingRotate180 (imOut , imIn );
2208- break ;
2209- case 4 :
2210- (void )ImagingRotate270 (imOut , imIn );
2211- break ;
2212- case 5 :
2213- (void )ImagingTranspose (imOut , imIn );
2214- break ;
2215- case 6 :
2216- (void )ImagingTransverse (imOut , imIn );
2217- break ;
2218- }
2195+ if (!imOut ) {
2196+ return NULL ;
2197+ }
2198+
2199+ Imaging imTemp = NULL ; // will be either NULL or imOut after the operation finishes
2200+ switch (op ) {
2201+ case 0 :
2202+ imTemp = ImagingFlipLeftRight (imOut , imIn );
2203+ break ;
2204+ case 1 :
2205+ imTemp = ImagingFlipTopBottom (imOut , imIn );
2206+ break ;
2207+ case 2 :
2208+ imTemp = ImagingRotate90 (imOut , imIn );
2209+ break ;
2210+ case 3 :
2211+ imTemp = ImagingRotate180 (imOut , imIn );
2212+ break ;
2213+ case 4 :
2214+ imTemp = ImagingRotate270 (imOut , imIn );
2215+ break ;
2216+ case 5 :
2217+ imTemp = ImagingTranspose (imOut , imIn );
2218+ break ;
2219+ case 6 :
2220+ imTemp = ImagingTransverse (imOut , imIn );
2221+ break ;
2222+ default :
2223+ PyErr_SetString (PyExc_ValueError , "No such transpose operation" );
2224+ return NULL ;
2225+ }
2226+ if (!imTemp ) { // operation failed and will have set an exception
2227+ ImagingDelete (imOut );
2228+ return NULL ;
22192229 }
22202230
22212231 return PyImagingNew (imOut );
0 commit comments