From af4edf10f545b94c1c3bdb21da6de9d9dba598a6 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sun, 24 Jun 2007 19:32:33 +0000 Subject: As reported by "Tro" in http://curl.haxx.se/mail/lib-2007-06/0161.html and http://curl.haxx.se/mail/lib-2007-06/0238.html, libcurl didn't properly do no-body requests on FTP files on re-used connections properly, or at least it didn't provide the info back in the header callback properly in the subsequent requests. --- CHANGES | 7 +++++++ RELEASE-NOTES | 1 + lib/ftp.c | 15 ++++++++++----- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 38a734f02..e3c8e3b9d 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,13 @@ Changelog +Daniel S (23 June 2007) +- As reported by "Tro" in http://curl.haxx.se/mail/lib-2007-06/0161.html and + http://curl.haxx.se/mail/lib-2007-06/0238.html, libcurl didn't properly do + no-body requests on FTP files on re-used connections properly, or at least + it didn't provide the info back in the header callback properly in the + subsequent requests. + Daniel S (21 June 2007) - Gerrit Bruchhäuser pointed out a warning that the Intel(R) Thread Checker tool reports and it was indeed a legitimate one and it is one fixed. It was diff --git a/RELEASE-NOTES b/RELEASE-NOTES index dc4b1f523..b09306f11 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -61,6 +61,7 @@ This release includes the following bugfixes: o list FTP root directories when login dir is not root o no longer slows down when getting very many URLs on the same command line o lock share before decreasing dirty counter + o no-body FTP requests on re-used connections This release includes the following known bugs: diff --git a/lib/ftp.c b/lib/ftp.c index 30de32f98..2e0740f64 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -1253,9 +1253,8 @@ static CURLcode ftp_state_post_rest(struct connectdata *conn) struct FTP *ftp = conn->data->reqdata.proto.ftp; struct SessionHandle *data = conn->data; - if(ftp->no_transfer || conn->bits.no_body) { + if(ftp->no_transfer) { /* doesn't transfer any data */ - ftp->no_transfer = TRUE; /* still possibly do PRE QUOTE jobs */ state(conn, FTP_RETR_PREQUOTE); @@ -3351,7 +3350,7 @@ CURLcode Curl_ftp_nextconnect(struct connectdata *conn) DEBUGF(infof(data, "DO-MORE phase starts\n")); - if(!ftp->no_transfer && !conn->bits.no_body) { + if(!ftp->no_transfer) { /* a transfer is about to take place */ if(data->set.upload) { @@ -3415,6 +3414,13 @@ CURLcode ftp_perform(struct connectdata *conn, DEBUGF(infof(conn->data, "DO phase starts\n")); + if(conn->bits.no_body) { + /* requested no body means no transfer... */ + struct FTP *ftp = conn->data->reqdata.proto.ftp; + ftp->no_transfer = TRUE; + } + + *dophase_done = FALSE; /* not done yet */ /* start the first command in the DO phase */ @@ -3795,8 +3801,7 @@ CURLcode ftp_parse_url_path(struct connectdata *conn) ftp->file=NULL; /* instead of point to a zero byte, we make it a NULL pointer */ - if(data->set.upload && !ftp->file && - (!ftp->no_transfer || conn->bits.no_body)) { + if(data->set.upload && !ftp->file && !ftp->no_transfer) { /* We need a file name when uploading. Return error! */ failf(data, "Uploading to a URL without a file name!"); return CURLE_URL_MALFORMAT; -- cgit v1.2.3