aboutsummaryrefslogtreecommitdiff
path: root/lib/ftp.c
diff options
context:
space:
mode:
authorBill Middlecamp <Bill.Middlecamp@quantum.com>2013-04-09 22:18:33 +0200
committerDaniel Stenberg <daniel@haxx.se>2013-04-09 22:18:33 +0200
commite0fb2d86c9f789131588a7cc93e9e881d601cecd (patch)
tree837147a6b8390524d88b2ca4d602d085c25909e9 /lib/ftp.c
parent658ec97055456f739222aa2a5719a4d403ced99a (diff)
FTP: handle "rubbish" in front of directory name in 257 responses
When doing PWD, there's a 257 response which apparently some servers prefix with a comment before the path instead of after it as is otherwise the norm. Failing to parse this, several otherwise legitimate use cases break. Bug: http://curl.haxx.se/mail/lib-2013-04/0113.html
Diffstat (limited to 'lib/ftp.c')
-rw-r--r--lib/ftp.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index ec586baa7..dce23de75 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2871,13 +2871,19 @@ static CURLcode ftp_statemach_act(struct connectdata *conn)
return CURLE_OUT_OF_MEMORY;
/* Reply format is like
- 257<space>"<directory-name>"<space><commentary> and the RFC959
- says
+ 257<space>[rubbish]"<directory-name>"<space><commentary> and the
+ RFC959 says
The directory name can contain any character; embedded
double-quotes should be escaped by double-quotes (the
"quote-doubling" convention).
*/
+
+ /* scan for the first double-quote for non-standard responses */
+ while(ptr < &data->state.buffer[sizeof(data->state.buffer)]
+ && *ptr != '\n' && *ptr != '\0' && *ptr != '"')
+ ptr++;
+
if('\"' == *ptr) {
/* it started good */
ptr++;