mirror of https://github.com/wolfSSL/wolfssh.git
commit
cea5d5664e
|
@ -1074,15 +1074,24 @@ static int ParseBasePathHelper(WOLFSSH* ssh, int cmdSz)
|
||||||
}
|
}
|
||||||
|
|
||||||
sz = sz - idx; /* size of file name */
|
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);
|
DYNTYPE_STRING);
|
||||||
if (ssh->scpFileName == NULL) {
|
if (ssh->scpFileName == NULL) {
|
||||||
WLOG(WS_LOG_DEBUG, "scp: memory error creaating file name\n");
|
WLOG(WS_LOG_DEBUG, "scp: memory error creaating file name\n");
|
||||||
ssh->scpBasePath = NULL;
|
ssh->scpBasePath = NULL;
|
||||||
return WS_MEMORY_E;
|
return WS_MEMORY_E;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ssh->scpFileReName = ssh->scpFileName;
|
||||||
WSTRNCPY(ssh->scpFileName, ssh->scpBasePath + idx, sz);
|
WSTRNCPY(ssh->scpFileName, ssh->scpBasePath + idx, sz);
|
||||||
ssh->scpFileName[sz] = '\0';
|
ssh->scpFileName[sz] = '\0';
|
||||||
|
ssh->scpFileNameSz = sz;
|
||||||
*((char*)ssh->scpBasePath + idx) = '\0';
|
*((char*)ssh->scpBasePath + idx) = '\0';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1235,9 +1244,12 @@ int ReceiveScpMessage(WOLFSSH* ssh)
|
||||||
if ((ret = GetScpFileSize(ssh, buf, sz, &idx)) != WS_SUCCESS)
|
if ((ret = GetScpFileSize(ssh, buf, sz, &idx)) != WS_SUCCESS)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (ssh->scpFileName == NULL) {
|
if (ssh->scpFileReName == NULL) {
|
||||||
ret = GetScpFileName(ssh, buf, sz, &idx);
|
ret = GetScpFileName(ssh, buf, sz, &idx);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
ssh->scpFileReName = NULL;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'E':
|
case 'E':
|
||||||
|
|
|
@ -296,6 +296,7 @@ struct WOLFSSH {
|
||||||
int scpFileMode; /* mode/permission of file/dir */
|
int scpFileMode; /* mode/permission of file/dir */
|
||||||
word32 scpFileSz; /* total size of file/dir being transferred */
|
word32 scpFileSz; /* total size of file/dir being transferred */
|
||||||
char* scpFileName; /* file name, dynamic */
|
char* scpFileName; /* file name, dynamic */
|
||||||
|
char* scpFileReName; /* file rename case, points to scpFileName */
|
||||||
word32 scpFileNameSz; /* length of fileName, not including \0 */
|
word32 scpFileNameSz; /* length of fileName, not including \0 */
|
||||||
byte scpTimestamp; /* did peer request timestamp? {0:1} */
|
byte scpTimestamp; /* did peer request timestamp? {0:1} */
|
||||||
word64 scpATime; /* scp file access time, secs since epoch */
|
word64 scpATime; /* scp file access time, secs since epoch */
|
||||||
|
|
Loading…
Reference in New Issue