X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/39934deb5202149f98198c111a35c21cb4d0d0f8..d6214a563632bb2c0d92d1e31dfea02880d97600:/windows/winsftp.c diff --git a/windows/winsftp.c b/windows/winsftp.c index d9ea3cac..82bea80d 100644 --- a/windows/winsftp.c +++ b/windows/winsftp.c @@ -445,6 +445,17 @@ void finish_wildcard_matching(WildcardMatcher *dir) sfree(dir); } +int vet_filename(char *name) +{ + if (strchr(name, '/') || strchr(name, '\\') || strchr(name, ':')) + return FALSE; + + if (!name[strspn(name, ".")]) /* entirely composed of dots */ + return FALSE; + + return TRUE; +} + int create_directory(char *name) { return CreateDirectory(name, NULL) != 0; @@ -462,7 +473,7 @@ char *dir_file_cat(char *dir, char *file) /* * Be told what socket we're supposed to be using. */ -static SOCKET sftp_ssh_socket; +static SOCKET sftp_ssh_socket = INVALID_SOCKET; static HANDLE netevent = NULL; char *do_select(SOCKET skt, int startup) { @@ -676,7 +687,7 @@ static DWORD WINAPI command_read_thread(void *param) return 0; } -char *ssh_sftp_get_cmdline(char *prompt) +char *ssh_sftp_get_cmdline(char *prompt, int no_fds_ok) { int ret; struct command_read_ctx actx, *ctx = &actx; @@ -685,7 +696,8 @@ char *ssh_sftp_get_cmdline(char *prompt) fputs(prompt, stdout); fflush(stdout); - if (sftp_ssh_socket == INVALID_SOCKET || p_WSAEventSelect == NULL) { + if ((sftp_ssh_socket == INVALID_SOCKET && no_fds_ok) || + p_WSAEventSelect == NULL) { return fgetline(stdin); /* very simple */ }