diff options
author | Zenju <zenju@gmx.de> | 2019-09-13 17:32:04 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-09-18 09:27:21 +0200 |
commit | 1c02a4e8747defab6607e90173d294875eb73ba1 (patch) | |
tree | 8b7e8edeea6989945f3ddafc13373e369a5f6b56 | |
parent | ac58c51b297466e248c2c1201c2c6c895c477a11 (diff) |
FTP: remove trailing slash from path for LIST/MLSD
Closes #4348
-rw-r--r-- | lib/ftp.c | 15 | ||||
-rw-r--r-- | tests/data/test1010 | 4 | ||||
-rw-r--r-- | tests/data/test1149 | 2 | ||||
-rw-r--r-- | tests/data/test244 | 2 | ||||
-rw-r--r-- | tests/data/test539 | 2 |
5 files changed, 12 insertions, 13 deletions
@@ -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; diff --git a/tests/data/test1010 b/tests/data/test1010 index b2083af7b..ef073f5e5 100644 --- a/tests/data/test1010 +++ b/tests/data/test1010 @@ -49,9 +49,9 @@ PASS ftp@example.com PWD
EPSV
TYPE A
-LIST /list/this/path/1010/
+LIST /list/this/path/1010
EPSV
-LIST /list/this/path/1010/
+LIST /list/this/path/1010
QUIT
</protocol> </verify> diff --git a/tests/data/test1149 b/tests/data/test1149 index f826391e9..f0c297dc1 100644 --- a/tests/data/test1149 +++ b/tests/data/test1149 @@ -57,7 +57,7 @@ TYPE A LIST
CWD /
EPSV
-LIST list/this/path/1149/
+LIST list/this/path/1149
QUIT
</protocol> </verify> diff --git a/tests/data/test244 b/tests/data/test244 index 8ce4b6346..080163dd1 100644 --- a/tests/data/test244 +++ b/tests/data/test244 @@ -47,7 +47,7 @@ PASS ftp@example.com PWD
EPSV
TYPE A
-LIST fir#t/third/244/
+LIST fir#t/third/244
QUIT
</protocol> </verify> diff --git a/tests/data/test539 b/tests/data/test539 index e9aadd1f3..a69834012 100644 --- a/tests/data/test539 +++ b/tests/data/test539 @@ -64,7 +64,7 @@ SYST CWD /
EPSV
TYPE A
-LIST path/to/the/file/539./
+LIST path/to/the/file/539.
QUIT
</protocol> </verify> |