Merge pull request #326 from ejohnstown/sftp-sz

SFTP Size
pull/329/head
JacobBarthelmeh 2021-02-26 21:43:54 +07:00 committed by GitHub
commit 35b8a50709
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 4 deletions

View File

@ -926,6 +926,29 @@ static int SFTP_SetAttributes(WOLFSSH* ssh, byte* buf, word32 bufSz,
}
static INLINE int SFTP_GetSz(byte* buf, word32* sz,
word32 lowerBound, word32 upperBound)
{
int ret = WS_SUCCESS;
if (buf == NULL || sz == NULL) {
ret = WS_BAD_ARGUMENT;
}
if (ret == WS_SUCCESS) {
word32 val;
ato32(buf, &val);
if (val < lowerBound || val > upperBound)
ret = WS_BUFFER_E;
else
*sz = val;
}
return ret;
}
#ifndef NO_WOLFSSH_SERVER
static int SFTP_GetAttributes(void* fs, const char* fileName,
@ -948,8 +971,8 @@ static int SFTP_ServerRecvInit(WOLFSSH* ssh) {
return len;
}
ato32(buf, &sz);
if (sz < MSG_ID_SZ + UINT32_SZ) {
if (SFTP_GetSz(buf, &sz,
MSG_ID_SZ + UINT32_SZ, WOLFSSH_MAX_SFTP_RECV) != WS_SUCCESS) {
wolfSSH_SFTP_ClearState(ssh, STATE_ID_ALL);
return WS_BUFFER_E;
}
@ -4679,8 +4702,9 @@ static int SFTP_ClientRecvInit(WOLFSSH* ssh) {
return len;
}
ato32(buf, &sz);
if (sz < MSG_ID_SZ + UINT32_SZ) {
if (SFTP_GetSz(buf, &sz,
MSG_ID_SZ + UINT32_SZ,
WOLFSSH_MAX_SFTP_RECV) != WS_SUCCESS) {
return WS_BUFFER_E;
}

View File

@ -152,6 +152,9 @@ struct WS_SFTPNAME {
#ifndef WOLFSSH_MAX_SFTP_RW
#define WOLFSSH_MAX_SFTP_RW 1024
#endif
#ifndef WOLFSSH_MAX_SFTP_RECV
#define WOLFSSH_MAX_SFTP_RECV 32768
#endif
/* functions for establishing a connection */
WOLFSSH_API int wolfSSH_SFTP_accept(WOLFSSH* ssh);