aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2006-08-18 23:17:33 +0000
committerDaniel Stenberg <daniel@haxx.se>2006-08-18 23:17:33 +0000
commit74a6921bc454fcbf842a221e95ba5dc09b19049e (patch)
treeaa04df572b3435faae0e9017ec68cd984ce02fbd
parent490cccba3cfd5ba54ecb64a10fb63c2f0e94a67d (diff)
Armel Asselin fixed a crash in the FTP code when using SINGLECWD mode and
files in the root directory.
-rw-r--r--CHANGES3
-rw-r--r--RELEASE-NOTES2
-rw-r--r--lib/ftp.c9
3 files changed, 10 insertions, 4 deletions
diff --git a/CHANGES b/CHANGES
index bacba4bd8..74c321984 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,9 @@
Changelog
Daniel (19 August 2006)
+- Armel Asselin fixed a crash in the FTP code when using SINGLECWD mode and
+ files in the root directory.
+
- Andrew Biggs pointed out a "Expect: 100-continue" flaw where libcurl didn't
send the whole request at once, even though the Expect: header was disabled
by the application. An effect of this change is also that small (< 1024
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 1f90ffe89..49698e524 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -15,6 +15,8 @@ This release includes the following changes:
This release includes the following bugfixes:
+ o SINGLECWD mode and using files in the root dir
+ o Expect: header disabling work better
o "Expect: 100-continue" disable on second POST on re-used connection
o src/config.h.in is fixed
diff --git a/lib/ftp.c b/lib/ftp.c
index a52ad56a8..e7d8b2269 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -3804,19 +3804,20 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
case FTPFILE_SINGLECWD:
/* get the last slash */
slash_pos=strrchr(cur_pos, '/');
- if(slash_pos) {
+ if(slash_pos || !cur_pos || !*cur_pos) {
ftp->dirdepth = 1; /* we consider it to be a single dir */
ftp->dirs = (char **)calloc(1, sizeof(ftp->dirs[0]));
if(!ftp->dirs)
return CURLE_OUT_OF_MEMORY;
- ftp->dirs[0] = curl_easy_unescape(conn->data, cur_pos,
- (int)(slash_pos-cur_pos), NULL);
+ ftp->dirs[0] = curl_easy_unescape(conn->data, slash_pos ? cur_pos : "/",
+ slash_pos?(int)(slash_pos-cur_pos):1,
+ NULL);
if(!ftp->dirs[0]) {
free(ftp->dirs);
return CURLE_OUT_OF_MEMORY;
}
- ftp->file = slash_pos+1; /* the rest is the file name */
+ ftp->file = slash_pos ? slash_pos+1 : cur_pos; /* rest is file name */
}
else
ftp->file = cur_pos; /* this is a file name only */