Based on an error report by Philippe Vaucher, we no longer count a retried

connection setup as a follow-redirect. It turns out 1) this fails when a FTP
connection is re-setup and 2) it does make the max-redirs counter behave
wrong. This fix was not verified since the reporter vanished, but I believe
this is the right fix nonetheless.
This commit is contained in:
Daniel Stenberg 2006-01-30 08:20:52 +00:00
parent f3bc8e6ce1
commit 32bc30e210
3 changed files with 19 additions and 8 deletions

View File

@ -6,6 +6,13 @@
Changelog
Daniel (30 January 2006)
- Based on an error report by Philippe Vaucher, we no longer count a retried
connection setup as a follow-redirect. It turns out 1) this fails when a FTP
connection is re-setup and 2) it does make the max-redirs counter behave
wrong. This fix was not verified since the reporter vanished, but I believe
this is the right fix nonetheless.
Daniel (24 January 2006)
- Michal Marek provided a patch for FTP that makes libcurl continue to try
PASV even after EPSV returned a positive response code, if libcurl failed to

View File

@ -18,6 +18,9 @@ This release includes the following changes:
This release includes the following bugfixes:
o re-creating a dead connection is no longer counted internally as a followed
redirect and thus prevents a weird error that would occur if a FTP
connection died on an attempted re-use
o Try PASV after failing to connect to the port the EPSV response contained
o -P [IP] with ipv6-enabled curl
o -P [hostname] with ipv6-disabled curl
@ -51,6 +54,6 @@ advice from friends like these:
Dov Murik, Jean Jacques Drouin, Andres Garcia, Yang Tse, Gisle Vanem, Dan
Fandrich, Alexander Lazic, Michael Jahn, Andrew Benham, Bryan Henderson,
David Shaw, Jon Turner, Duane Cathey, Michal Marek
David Shaw, Jon Turner, Duane Cathey, Michal Marek, Philippe Vaucher
Thanks! (and sorry if I forgot to mention someone)

View File

@ -1765,17 +1765,18 @@ CURLcode Curl_follow(struct SessionHandle *data,
size_t newlen;
char *newest;
if ((data->set.maxredirs != -1) &&
(data->set.followlocation >= data->set.maxredirs)) {
failf(data,"Maximum (%d) redirects followed", data->set.maxredirs);
return CURLE_TOO_MANY_REDIRECTS;
}
if(!retry) {
if ((data->set.maxredirs != -1) &&
(data->set.followlocation >= data->set.maxredirs)) {
failf(data,"Maximum (%d) redirects followed", data->set.maxredirs);
return CURLE_TOO_MANY_REDIRECTS;
}
if(!retry)
/* mark the next request as a followed location: */
data->state.this_is_a_follow = TRUE;
data->set.followlocation++; /* count location-followers */
data->set.followlocation++; /* count location-followers */
}
if(data->set.http_auto_referer) {
/* We are asked to automatically set the previous URL as the