Skip to content

Commit f9fd634

Browse files
make SFTP more robust at keeping track of state during rekey
1 parent a2e6556 commit f9fd634

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

src/wolfsftp.c

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7746,11 +7746,11 @@ int wolfSSH_SFTP_SendReadPacket(WOLFSSH* ssh, byte* handle, word32 handleSz,
77467746
/* Get response */
77477747
if ((ret = SFTP_GetHeader(ssh, &state->reqId, &state->type,
77487748
&state->buffer)) <= 0) {
7749-
if (!NoticeError(ssh)) {
7750-
state->state = STATE_SEND_READ_CLEANUP;
7751-
continue;
7749+
if (NoticeError(ssh)) {
7750+
return WS_FATAL_ERROR;
77527751
}
7753-
return WS_FATAL_ERROR;
7752+
state->state = STATE_SEND_READ_CLEANUP;
7753+
continue;
77547754
}
77557755
ret = wolfSSH_SFTP_buffer_create(ssh, &state->buffer, ret);
77567756
if (ret != WS_SUCCESS) {
@@ -7789,11 +7789,11 @@ int wolfSSH_SFTP_SendReadPacket(WOLFSSH* ssh, byte* handle, word32 handleSz,
77897789
/* get size of string and place it into out buffer */
77907790
ret = wolfSSH_stream_read(ssh, szFlat, UINT32_SZ);
77917791
if (ret < 0) {
7792-
if (!NoticeError(ssh)) {
7793-
state->state = STATE_SEND_READ_CLEANUP;
7794-
continue;
7792+
if (NoticeError(ssh)) {
7793+
return WS_FATAL_ERROR;
77957794
}
7796-
return ret;
7795+
state->state = STATE_SEND_READ_CLEANUP;
7796+
continue;
77977797
}
77987798
ato32(szFlat, &sz);
77997799
wolfSSH_SFTP_buffer_create(ssh, &state->buffer, sz);
@@ -7814,8 +7814,7 @@ int wolfSSH_SFTP_SendReadPacket(WOLFSSH* ssh, byte* handle, word32 handleSz,
78147814
out + state->recvSz,
78157815
wolfSSH_SFTP_buffer_size(&state->buffer));
78167816
if (ret < 0) {
7817-
if (ssh->error == WS_WANT_READ ||
7818-
ssh->error == WS_WANT_WRITE) {
7817+
if (NoticeError(ssh)) {
78197818
return WS_FATAL_ERROR;
78207819
}
78217820
WLOG(WS_LOG_SFTP, "Error reading remainder of data");
@@ -7852,12 +7851,11 @@ int wolfSSH_SFTP_SendReadPacket(WOLFSSH* ssh, byte* handle, word32 handleSz,
78527851
ret = wolfSSH_SFTP_buffer_read(ssh, &state->buffer,
78537852
wolfSSH_SFTP_buffer_size(&state->buffer));
78547853
if (ret < 0) {
7855-
if (ssh->error != WS_WANT_READ &&
7856-
ssh->error != WS_WANT_WRITE) {
7857-
state->state = STATE_SEND_READ_CLEANUP;
7858-
continue;
7854+
if (NoticeError(ssh)) {
7855+
return WS_FATAL_ERROR;
78597856
}
7860-
return WS_FATAL_ERROR;
7857+
state->state = STATE_SEND_READ_CLEANUP;
7858+
continue;
78617859
}
78627860
wolfSSH_SFTP_buffer_rewind(&state->buffer);
78637861
ret = wolfSSH_SFTP_DoStatus(ssh,

0 commit comments

Comments
 (0)