Merge pull request #87 from JacobBarthelmeh/testing

fix for recursive scp case
pull/88/head
Chris Conlon 2018-08-07 16:49:39 -06:00 committed by GitHub
commit cea5d5664e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 6 deletions

View File

@ -1074,15 +1074,24 @@ static int ParseBasePathHelper(WOLFSSH* ssh, int cmdSz)
}
sz = sz - idx; /* size of file name */
ssh->scpFileName = (char*)WMALLOC(sz + 1, ssh->ctx->heap,
if (ssh->scpFileNameSz < (word32)sz || ssh->scpFileName == NULL) {
if (ssh->scpFileName != NULL) {
WFREE(ssh->scpFileName, ssh->ctx->heap, DYNTYPE_STRING);
ssh->scpFileNameSz = 0;
}
ssh->scpFileName = (char*)WMALLOC(sz + 1, ssh->ctx->heap,
DYNTYPE_STRING);
if (ssh->scpFileName == NULL) {
WLOG(WS_LOG_DEBUG, "scp: memory error creaating file name\n");
ssh->scpBasePath = NULL;
return WS_MEMORY_E;
if (ssh->scpFileName == NULL) {
WLOG(WS_LOG_DEBUG, "scp: memory error creaating file name\n");
ssh->scpBasePath = NULL;
return WS_MEMORY_E;
}
}
ssh->scpFileReName = ssh->scpFileName;
WSTRNCPY(ssh->scpFileName, ssh->scpBasePath + idx, sz);
ssh->scpFileName[sz] = '\0';
ssh->scpFileNameSz = sz;
*((char*)ssh->scpBasePath + idx) = '\0';
}
else {
@ -1235,9 +1244,12 @@ int ReceiveScpMessage(WOLFSSH* ssh)
if ((ret = GetScpFileSize(ssh, buf, sz, &idx)) != WS_SUCCESS)
break;
if (ssh->scpFileName == NULL) {
if (ssh->scpFileReName == NULL) {
ret = GetScpFileName(ssh, buf, sz, &idx);
}
else {
ssh->scpFileReName = NULL;
}
break;
case 'E':

View File

@ -296,6 +296,7 @@ struct WOLFSSH {
int scpFileMode; /* mode/permission of file/dir */
word32 scpFileSz; /* total size of file/dir being transferred */
char* scpFileName; /* file name, dynamic */
char* scpFileReName; /* file rename case, points to scpFileName */
word32 scpFileNameSz; /* length of fileName, not including \0 */
byte scpTimestamp; /* did peer request timestamp? {0:1} */
word64 scpATime; /* scp file access time, secs since epoch */