From 1c02a4e8747defab6607e90173d294875eb73ba1 Mon Sep 17 00:00:00 2001 From: Zenju Date: Fri, 13 Sep 2019 17:32:04 +0200 Subject: FTP: remove trailing slash from path for LIST/MLSD Closes #4348 --- lib/ftp.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'lib/ftp.c') diff --git a/lib/ftp.c b/lib/ftp.c index 00233a80d..068a1a024 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -1446,20 +1446,19 @@ static CURLcode ftp_state_list(struct connectdata *conn) The other ftp_filemethods will CWD into dir/dir/ first and then just do LIST (in that case: nothing to do here) */ - char *cmd, *lstArg, *slashPos; + char *cmd, *lstArg; const char *inpath = ftp->path; lstArg = NULL; if((data->set.ftp_filemethod == FTPFILE_NOCWD) && inpath && inpath[0] && strchr(inpath, '/')) { - size_t n = strlen(inpath); + /* chop off the file part if format is dir/file + otherwise remove the trailing slash for dir/dir/ + and full paths like %2f/ except for / */ + size_t n = strrchr(inpath, '/') - inpath; + if(n == 0) + ++n; - /* Check if path does not end with /, as then we cut off the file part */ - if(inpath[n - 1] != '/') { - /* chop off the file part if format is dir/dir/file */ - slashPos = strrchr(inpath, '/'); - n = slashPos - inpath; - } result = Curl_urldecode(data, inpath, n, &lstArg, NULL, TRUE); if(result) return result; -- cgit v1.2.3