mirror of https://github.com/wolfSSL/wolfssh.git
adjustment for handling '/./' case
parent
abd1b6f888
commit
2a4d73df61
|
@ -12276,13 +12276,18 @@ int wolfSSH_CleanPath(WOLFSSH* ssh, char* in)
|
||||||
long sz;
|
long sz;
|
||||||
byte found;
|
byte found;
|
||||||
char *path;
|
char *path;
|
||||||
|
void *heap = NULL;
|
||||||
|
|
||||||
if (in == NULL) {
|
if (in == NULL) {
|
||||||
return WS_BAD_ARGUMENT;
|
return WS_BAD_ARGUMENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ssh != NULL) {
|
||||||
|
heap = ssh->ctx->heap;
|
||||||
|
}
|
||||||
|
|
||||||
sz = (long)WSTRLEN(in);
|
sz = (long)WSTRLEN(in);
|
||||||
path = (char*)WMALLOC(sz+1, ssh->ctx->heap, DYNTYPE_PATH);
|
path = (char*)WMALLOC(sz+1, heap, DYNTYPE_PATH);
|
||||||
if (path == NULL) {
|
if (path == NULL) {
|
||||||
return WS_MEMORY_E;
|
return WS_MEMORY_E;
|
||||||
}
|
}
|
||||||
|
@ -12299,8 +12304,8 @@ int wolfSSH_CleanPath(WOLFSSH* ssh, char* in)
|
||||||
/* remove any /./ patterns, direcotries, exclude cases like ./ok./test */
|
/* remove any /./ patterns, direcotries, exclude cases like ./ok./test */
|
||||||
for (i = 1; i + 1 < sz; i++) {
|
for (i = 1; i + 1 < sz; i++) {
|
||||||
if (path[i] == '.' && path[i - 1] == WS_DELIM && path[i + 1] == WS_DELIM) {
|
if (path[i] == '.' && path[i - 1] == WS_DELIM && path[i + 1] == WS_DELIM) {
|
||||||
WMEMMOVE(path + i, path + i + 1, sz - (i + 1));
|
WMEMMOVE(path + (i-1), path + (i+1), sz - (i-1));
|
||||||
sz -= 1;
|
sz -= 2; /* removed '/.' from string*/
|
||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12412,13 +12417,13 @@ int wolfSSH_CleanPath(WOLFSSH* ssh, char* in)
|
||||||
/* copy result back to 'in' buffer */
|
/* copy result back to 'in' buffer */
|
||||||
if (WSTRLEN(in) < WSTRLEN(path)) {
|
if (WSTRLEN(in) < WSTRLEN(path)) {
|
||||||
WLOG(WS_LOG_ERROR, "Fatal error cleaning path");
|
WLOG(WS_LOG_ERROR, "Fatal error cleaning path");
|
||||||
WFREE(path, ssh->ctx->heap, DYNTYPE_PATH);
|
WFREE(path, heap, DYNTYPE_PATH);
|
||||||
return WS_BUFFER_E;
|
return WS_BUFFER_E;
|
||||||
}
|
}
|
||||||
sz = (long)WSTRLEN(path);
|
sz = (long)WSTRLEN(path);
|
||||||
WMEMCPY(in, path, sz);
|
WMEMCPY(in, path, sz);
|
||||||
in[sz] = '\0';
|
in[sz] = '\0';
|
||||||
WFREE(path, ssh->ctx->heap, DYNTYPE_PATH);
|
WFREE(path, heap, DYNTYPE_PATH);
|
||||||
return (int)sz;
|
return (int)sz;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSH_SFTP || WOLFSSH_SCP */
|
#endif /* WOLFSSH_SFTP || WOLFSSH_SCP */
|
||||||
|
|
Loading…
Reference in New Issue