diff --git a/src/wolfsftp.c b/src/wolfsftp.c index 3a7e4bceb..f86e27ecc 100644 --- a/src/wolfsftp.c +++ b/src/wolfsftp.c @@ -2069,7 +2069,12 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz) } /* @TODO handle attributes */ - SFTP_ParseAttributes_buffer(ssh, &atr, data, &idx, maxSz); + if (SFTP_ParseAttributes_buffer(ssh, &atr, data, &idx, maxSz) + != WS_SUCCESS) { + ret = WS_BAD_FILE_E; + goto cleanup; + } + if ((reason & WOLFSSH_FXF_READ) && (reason & WOLFSSH_FXF_WRITE)) { WLOG(WS_LOG_SFTP, "Opening file with WOLFSSH_O_RDWR"); m |= WOLFSSH_O_RDWR; @@ -2277,7 +2282,11 @@ int wolfSSH_SFTP_RecvOpen(WOLFSSH* ssh, int reqId, byte* data, word32 maxSz) #if 0 /* @TODO handle attributes */ - SFTP_ParseAttributes_buffer(ssh, &atr, data, &idx, maxSz); + if (SFTP_ParseAttributes_buffer(ssh, &atr, data, &idx, maxSz) + != WS_SUCCESS) { + ret = WS_BAD_FILE_E; + goto cleanup; + } #endif if (reason & WOLFSSH_FXF_READ) { @@ -6381,9 +6390,14 @@ static WS_SFTPNAME* wolfSSH_SFTP_DoName(WOLFSSH* ssh) } wolfSSH_SFTP_buffer_rewind(&state->buffer); - wolfSSH_SFTP_DoStatus(ssh, reqId, &state->buffer); - if (!NoticeError(ssh)) { - wolfSSH_SFTP_ClearState(ssh, STATE_ID_NAME); + ret = wolfSSH_SFTP_DoStatus(ssh, reqId, &state->buffer); + wolfSSH_SFTP_ClearState(ssh, STATE_ID_NAME); + if (ret < 0) { + ssh->error = ret; + } + else if (ret != WOLFSSH_FTP_OK) { + WLOG(WS_LOG_SFTP, "SFTP server returned status %d", ret); + ssh->error = WS_SFTP_STATUS_NOT_OK; } return NULL; }