@@ -2172,17 +2172,17 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
21722172 }
21732173#endif
21742174
2175- if ( ret == WS_SUCCESS ) {
2176- /* create packet */
2177- out = ( byte * ) WMALLOC ( outSz , ssh -> ctx -> heap , DYNTYPE_BUFFER );
2178- if (out == NULL ) {
2175+ /* create packet */
2176+ out = ( byte * ) WMALLOC ( outSz , ssh -> ctx -> heap , DYNTYPE_BUFFER );
2177+ if ( out == NULL ) {
2178+ if (ret == WS_SUCCESS ) {
21792179 #ifdef MICROCHIP_MPLAB_HARMONY
21802180 WFCLOSE (ssh -> fs , & fd );
21812181 #else
21822182 WCLOSE (ssh -> fs , fd );
21832183 #endif
2184- return WS_MEMORY_E ;
21852184 }
2185+ return WS_MEMORY_E ;
21862186 }
21872187 if (ret == WS_SUCCESS ) {
21882188 if (SFTP_CreatePacket (ssh , WOLFSSH_FTP_HANDLE , out , outSz ,
@@ -2192,20 +2192,21 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
21922192 #else
21932193 WCLOSE (ssh -> fs , fd );
21942194 #endif
2195+ WFREE (out , ssh -> ctx -> heap , DYNTYPE_BUFFER );
21952196 return WS_FATAL_ERROR ;
21962197 }
21972198 }
21982199 else {
2200+ if (fd >= 0 ) {
2201+ #ifdef MICROCHIP_MPLAB_HARMONY
2202+ WFCLOSE (ssh -> fs , & fd );
2203+ #else
2204+ WCLOSE (ssh -> fs , fd );
2205+ #endif
2206+ }
21992207 if (wolfSSH_SFTP_CreateStatus (ssh , WOLFSSH_FTP_FAILURE , reqId , res ,
22002208 "English" , out , & outSz ) != WS_SUCCESS ) {
22012209 WFREE (out , ssh -> ctx -> heap , DYNTYPE_BUFFER );
2202- if (fd >= 0 ) {
2203- #ifdef MICROCHIP_MPLAB_HARMONY
2204- WFCLOSE (ssh -> fs , & fd );
2205- #else
2206- WCLOSE (ssh -> fs , fd );
2207- #endif
2208- }
22092210 return WS_FATAL_ERROR ;
22102211 }
22112212 }
@@ -2311,30 +2312,41 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz)
23112312 }
23122313
23132314#ifdef WOLFSSH_STOREHANDLE
2314- if (SFTP_AddHandleNode (ssh ,
2315- (byte * )& fileHandle , sizeof (HANDLE ), dir ) != WS_SUCCESS ) {
2315+ if (ret == WS_SUCCESS ) {
2316+ if (SFTP_AddHandleNode (ssh ,
2317+ (byte * )& fileHandle , sizeof (HANDLE ), dir ) != WS_SUCCESS ) {
23162318 WLOG (WS_LOG_SFTP , "Unable to store handle" );
23172319 res = ier ;
23182320 if (wolfSSH_SFTP_CreateStatus (ssh , WOLFSSH_FTP_FAILURE , reqId , res ,
23192321 "English" , NULL , & outSz ) != WS_SIZE_ONLY ) {
2322+ CloseHandle (fileHandle );
23202323 return WS_FATAL_ERROR ;
23212324 }
23222325 ret = WS_FATAL_ERROR ;
2326+ }
23232327 }
23242328#endif
23252329
23262330 /* create packet */
23272331 out = (byte * )WMALLOC (outSz , ssh -> ctx -> heap , DYNTYPE_BUFFER );
23282332 if (out == NULL ) {
2333+ if (ret == WS_SUCCESS ) {
2334+ CloseHandle (fileHandle );
2335+ }
23292336 return WS_MEMORY_E ;
23302337 }
23312338 if (ret == WS_SUCCESS ) {
23322339 if (SFTP_CreatePacket (ssh , WOLFSSH_FTP_HANDLE , out , outSz ,
23332340 (byte * )& fileHandle , sizeof (HANDLE )) != WS_SUCCESS ) {
2341+ CloseHandle (fileHandle );
2342+ WFREE (out , ssh -> ctx -> heap , DYNTYPE_BUFFER );
23342343 return WS_FATAL_ERROR ;
23352344 }
23362345 }
23372346 else {
2347+ if (fileHandle != INVALID_HANDLE_VALUE ) {
2348+ CloseHandle (fileHandle );
2349+ }
23382350 if (wolfSSH_SFTP_CreateStatus (ssh , WOLFSSH_FTP_FAILURE , reqId , res ,
23392351 "English" , out , & outSz ) != WS_SUCCESS ) {
23402352 WFREE (out , ssh -> ctx -> heap , DYNTYPE_BUFFER );
0 commit comments