mirror of
https://github.com/curl/curl.git
synced 2026-07-28 23:43:06 +03:00
FTP: access files in root dir correctly
Accessing a file with an absolute path in the root dir but with no directory specified was not handled correctly. This fix comes with four new test cases that verify it. Bug: http://curl.haxx.se/mail/lib-2013-04/0142.html Reported by: Sam Deane
This commit is contained in:
parent
c01735865f
commit
61d259f950
7 changed files with 221 additions and 4 deletions
17
lib/ftp.c
17
lib/ftp.c
|
|
@ -4316,13 +4316,17 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
|
|||
}
|
||||
slash_pos=strrchr(cur_pos, '/');
|
||||
if(slash_pos || !*cur_pos) {
|
||||
size_t dirlen = slash_pos-cur_pos;
|
||||
|
||||
ftpc->dirs = calloc(1, sizeof(ftpc->dirs[0]));
|
||||
if(!ftpc->dirs)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
if(!dirlen)
|
||||
dirlen++;
|
||||
|
||||
ftpc->dirs[0] = curl_easy_unescape(conn->data, slash_pos ? cur_pos : "/",
|
||||
slash_pos ?
|
||||
curlx_sztosi(slash_pos-cur_pos) : 1,
|
||||
slash_pos ? curlx_sztosi(dirlen) : 1,
|
||||
NULL);
|
||||
if(!ftpc->dirs[0]) {
|
||||
freedirs(ftpc);
|
||||
|
|
@ -4377,6 +4381,15 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
|
|||
}
|
||||
else {
|
||||
cur_pos = slash_pos + 1; /* jump to the rest of the string */
|
||||
if(!ftpc->dirdepth) {
|
||||
/* path starts with a slash, add that as a directory */
|
||||
ftpc->dirs[ftpc->dirdepth] = strdup("/");
|
||||
if(!ftpc->dirs[ftpc->dirdepth++]) { /* run out of memory ... */
|
||||
failf(data, "no memory");
|
||||
freedirs(ftpc);
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue