[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnurl] 36/73: FTP: URL decode path for dir listing in nocw
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnurl] 36/73: FTP: URL decode path for dir listing in nocwd mode |
Date: |
Tue, 24 Oct 2017 18:54:17 +0200 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to branch master
in repository gnurl.
commit ecf21c551fa3426579463abe34b623111b8d487c
Author: Daniel Stenberg <address@hidden>
AuthorDate: Tue Oct 10 12:02:11 2017 +0200
FTP: URL decode path for dir listing in nocwd mode
Reported-by: Zenju on github
Test 244 added to verify
Fixes #1974
Closes #1976
---
lib/ftp.c | 21 +++++++++----------
tests/data/Makefile.inc | 2 +-
tests/data/test244 | 54 +++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 64 insertions(+), 13 deletions(-)
diff --git a/lib/ftp.c b/lib/ftp.c
index d7be88136..0c9df7890 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -1457,25 +1457,22 @@ static CURLcode ftp_state_list(struct connectdata *conn)
then just do LIST (in that case: nothing to do here)
*/
char *cmd, *lstArg, *slashPos;
+ const char *inpath = data->state.path;
lstArg = NULL;
if((data->set.ftp_filemethod == FTPFILE_NOCWD) &&
- data->state.path &&
- data->state.path[0] &&
- strchr(data->state.path, '/')) {
-
- lstArg = strdup(data->state.path);
- if(!lstArg)
- return CURLE_OUT_OF_MEMORY;
+ inpath && inpath[0] && strchr(inpath, '/')) {
+ size_t n = strlen(inpath);
/* Check if path does not end with /, as then we cut off the file part */
- if(lstArg[strlen(lstArg) - 1] != '/') {
-
+ if(inpath[n - 1] != '/') {
/* chop off the file part if format is dir/dir/file */
- slashPos = strrchr(lstArg, '/');
- if(slashPos)
- *(slashPos + 1) = '\0';
+ slashPos = strrchr(inpath, '/');
+ n = slashPos - inpath;
}
+ result = Curl_urldecode(data, inpath, n, &lstArg, NULL, FALSE);
+ if(result)
+ return result;
}
cmd = aprintf("%s%s%s",
diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc
index caf7314de..c84ea79e7 100644
--- a/tests/data/Makefile.inc
+++ b/tests/data/Makefile.inc
@@ -47,7 +47,7 @@ test208 test209 test210 test211 test212 test213 test214
test215 test216 \
test217 test218 test219 test220 test221 test222 test223 test224 test225 \
test226 test227 test228 test229 test231 test233 test234 \
test235 test236 test237 test238 test239 test240 test241 test242 test243 \
- test245 test246 test247 test248 test249 test250 test251 test252 \
+test244 test245 test246 test247 test248 test249 test250 test251 test252 \
test253 test254 test255 test256 test257 test258 test259 test260 test261 \
test262 test263 test264 test265 test266 test267 test268 test269 test270 \
test271 test272 test273 test274 test275 test276 test277 test278 test279 \
diff --git a/tests/data/test244 b/tests/data/test244
new file mode 100644
index 000000000..8ce4b6346
--- /dev/null
+++ b/tests/data/test244
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+CWD
+--ftp-method
+nocwd
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data mode="text">
+total 20
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 .
+drwxr-xr-x 8 98 98 512 Oct 22 13:06 ..
+drwxr-xr-x 2 98 98 512 May 2 1996 .NeXT
+-r--r--r-- 1 0 1 35 Jul 16 1996 README
+lrwxrwxrwx 1 0 1 7 Dec 9 1999 bin -> usr/bin
+dr-xr-xr-x 2 0 1 512 Oct 1 1997 dev
+drwxrwxrwx 2 98 98 512 May 29 16:04 download.html
+dr-xr-xr-x 2 0 1 512 Nov 30 1995 etc
+drwxrwxrwx 2 98 1 512 Oct 30 14:33 pub
+dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP dir listing with nocwd and URL encoded path
+ </name>
+ <command>
+--ftp-method nocwd ftp://%HOSTIP:%FTPPORT/fir%23t/th%69rd/244/
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS address@hidden
+PWD
+EPSV
+TYPE A
+LIST fir#t/third/244/
+QUIT
+</protocol>
+</verify>
+</testcase>
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [gnurl] 62/73: vtls: change struct Curl_ssl `close' field name to `close_one'., (continued)
- [GNUnet-SVN] [gnurl] 62/73: vtls: change struct Curl_ssl `close' field name to `close_one'., gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 57/73: setopt: range check most long options, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 60/73: test652: curl_mime_data + base64 encoder with large contents, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 23/73: mime: improve unbinding top multipart from easy handle., gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 13/73: vtls: fix warnings with --disable-crypto-auth, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 28/73: RTSP: avoid integer overflow on funny RTSP response, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 18/73: Revert "multi_done: wait for name resolve to finish if still ongoing", gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 37/73: smtp_done: free data before returning (on send failure), gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 21/73: curlver.h: next expected release is 7.57.0, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 27/73: ftpserver: properly reset $ftptargetdir., gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 36/73: FTP: URL decode path for dir listing in nocwd mode,
gnunet <=
- [GNUnet-SVN] [gnurl] 31/73: openssl: enable PKCS12 support for !BoringSSL, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 40/73: openssl: don't use old BORINGSSL_YYYYMM macros, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 41/73: url: Update current connection SSL verify params in setopt, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 29/73: mime: properly unbind mime structure in curl_mime_free()., gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 32/73: FAQ: s/CURLOPT_PROGRESSFUNCTION/CURLOPT_XFERINFOFUNCTION, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 34/73: CURLOPT_XFERINFODATA.3: fix duplicate see also, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 46/73: cli tool: use file2memory() to buffer stdin in -F option., gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 25/73: mime: refuse to add subparts to one of their own descendants., gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 55/73: makefile.m32: allow to override gcc, ar and ranlib, gnunet, 2017/10/24
- [GNUnet-SVN] [gnurl] 50/73: mime: do not call failf() if easy handle is NULL., gnunet, 2017/10/24