mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
Nis Jorgensen filed bug report #1338648
(http://curl.haxx.se/bug/view.cgi?id=1338648) which really is more of a feature request, but anyway. It pointed out that --max-redirs did not allow it to be set to 0, which then would return an error code on the first Location: found. Based on Nis' patch, now libcurl supports CURLOPT_MAXREDIRS set to 0, or -1 for infinity. Added test case 274 to verify.
This commit is contained in:
parent
6f8fe67ace
commit
966fa848a0
7
CHANGES
7
CHANGES
@ -9,6 +9,13 @@
|
|||||||
|
|
||||||
|
|
||||||
Daniel (27 October 2005)
|
Daniel (27 October 2005)
|
||||||
|
- Nis Jorgensen filed bug report #1338648
|
||||||
|
(http://curl.haxx.se/bug/view.cgi?id=1338648) which really is more of a
|
||||||
|
feature request, but anyway. It pointed out that --max-redirs did not allow
|
||||||
|
it to be set to 0, which then would return an error code on the first
|
||||||
|
Location: found. Based on Nis' patch, now libcurl supports CURLOPT_MAXREDIRS
|
||||||
|
set to 0, or -1 for infinity. Added test case 274 to verify.
|
||||||
|
|
||||||
- tommink[at]post.pl reported in bug report #1337723
|
- tommink[at]post.pl reported in bug report #1337723
|
||||||
(http://curl.haxx.se/bug/view.cgi?id=1337723) that curl could not upload
|
(http://curl.haxx.se/bug/view.cgi?id=1337723) that curl could not upload
|
||||||
binary data from stdin on Windows if the data contained control-Z (hex 1a)
|
binary data from stdin on Windows if the data contained control-Z (hex 1a)
|
||||||
|
@ -1127,7 +1127,8 @@ If this option is used several times, the last one will be used.
|
|||||||
.IP "--max-redirs <num>"
|
.IP "--max-redirs <num>"
|
||||||
Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
|
Set maximum number of redirection-followings allowed. If \fI-L/--location\fP
|
||||||
is used, this option can be used to prevent curl from following redirections
|
is used, this option can be used to prevent curl from following redirections
|
||||||
\&"in absurdum".
|
\&"in absurdum". By default, the limit is set to 50 redirections. Set this
|
||||||
|
option to -1 to make it limitless.
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-0/--http1.0"
|
.IP "-0/--http1.0"
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
.\" * $Id$
|
.\" * $Id$
|
||||||
.\" **************************************************************************
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_setopt 3 "22 Sep 2005" "libcurl 7.14.2" "libcurl Manual"
|
.TH curl_easy_setopt 3 "27 Oct 2005" "libcurl 7.14.2" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_easy_setopt - set options for a curl easy handle
|
curl_easy_setopt - set options for a curl easy handle
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -516,7 +516,9 @@ option is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP.
|
|||||||
Pass a long. The set number will be the redirection limit. If that many
|
Pass a long. The set number will be the redirection limit. If that many
|
||||||
redirections have been followed, the next redirect will cause an error
|
redirections have been followed, the next redirect will cause an error
|
||||||
(\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the
|
(\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the
|
||||||
\fICURLOPT_FOLLOWLOCATION\fP is used at the same time.
|
\fICURLOPT_FOLLOWLOCATION\fP is used at the same time. Added in 7.15.1:
|
||||||
|
Setting the limit to 0 will make libcurl refuse any redirect. Set it to -1 for
|
||||||
|
an infinite number of redirects (which is the default)
|
||||||
.IP CURLOPT_PUT
|
.IP CURLOPT_PUT
|
||||||
A non-zero parameter tells the library to use HTTP PUT to transfer data. The
|
A non-zero parameter tells the library to use HTTP PUT to transfer data. The
|
||||||
data should be set with \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP.
|
data should be set with \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP.
|
||||||
|
@ -1765,7 +1765,7 @@ CURLcode Curl_follow(struct SessionHandle *data,
|
|||||||
size_t newlen;
|
size_t newlen;
|
||||||
char *newest;
|
char *newest;
|
||||||
|
|
||||||
if (data->set.maxredirs &&
|
if ((data->set.maxredirs != -1) &&
|
||||||
(data->set.followlocation >= data->set.maxredirs)) {
|
(data->set.followlocation >= data->set.maxredirs)) {
|
||||||
failf(data,"Maximum (%d) redirects followed", data->set.maxredirs);
|
failf(data,"Maximum (%d) redirects followed", data->set.maxredirs);
|
||||||
return CURLE_TOO_MANY_REDIRECTS;
|
return CURLE_TOO_MANY_REDIRECTS;
|
||||||
|
@ -320,7 +320,7 @@ CURLcode Curl_open(struct SessionHandle **curl)
|
|||||||
|
|
||||||
data->set.infilesize = -1; /* we don't know any size */
|
data->set.infilesize = -1; /* we don't know any size */
|
||||||
data->set.postfieldsize = -1;
|
data->set.postfieldsize = -1;
|
||||||
|
data->set.maxredirs = -1; /* allow any amount by default */
|
||||||
data->state.current_speed = -1; /* init to negative == impossible */
|
data->state.current_speed = -1; /* init to negative == impossible */
|
||||||
|
|
||||||
data->set.httpreq = HTTPREQ_GET; /* Default HTTP request */
|
data->set.httpreq = HTTPREQ_GET; /* Default HTTP request */
|
||||||
|
@ -956,7 +956,8 @@ struct UserDefined {
|
|||||||
char *set_range; /* range, if used. See README for detailed specification
|
char *set_range; /* range, if used. See README for detailed specification
|
||||||
on this syntax. */
|
on this syntax. */
|
||||||
long followlocation; /* as in HTTP Location: */
|
long followlocation; /* as in HTTP Location: */
|
||||||
long maxredirs; /* maximum no. of http(s) redirects to follow */
|
long maxredirs; /* maximum no. of http(s) redirects to follow, set to -1
|
||||||
|
for infinity */
|
||||||
char *set_referer; /* custom string */
|
char *set_referer; /* custom string */
|
||||||
bool free_referer; /* set TRUE if 'referer' points to a string we
|
bool free_referer; /* set TRUE if 'referer' points to a string we
|
||||||
allocated */
|
allocated */
|
||||||
|
@ -3211,6 +3211,7 @@ operate(struct Configurable *config, int argc, char *argv[])
|
|||||||
config->create_dirs=FALSE;
|
config->create_dirs=FALSE;
|
||||||
config->lastrecvtime = curlx_tvnow();
|
config->lastrecvtime = curlx_tvnow();
|
||||||
config->lastsendtime = curlx_tvnow();
|
config->lastsendtime = curlx_tvnow();
|
||||||
|
config->maxredirs = DEFAULT_MAXREDIRS;
|
||||||
|
|
||||||
if(argc>1 &&
|
if(argc>1 &&
|
||||||
(!curlx_strnequal("--", argv[1], 2) && (argv[1][0] == '-')) &&
|
(!curlx_strnequal("--", argv[1], 2) && (argv[1][0] == '-')) &&
|
||||||
@ -3803,11 +3804,7 @@ operate(struct Configurable *config, int argc, char *argv[])
|
|||||||
curl_easy_setopt(curl, CURLOPT_FILETIME, TRUE);
|
curl_easy_setopt(curl, CURLOPT_FILETIME, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config->maxredirs)
|
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, config->maxredirs);
|
||||||
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, config->maxredirs);
|
|
||||||
else
|
|
||||||
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, DEFAULT_MAXREDIRS);
|
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_CRLF, config->crlf);
|
curl_easy_setopt(curl, CURLOPT_CRLF, config->crlf);
|
||||||
curl_easy_setopt(curl, CURLOPT_QUOTE, config->quote);
|
curl_easy_setopt(curl, CURLOPT_QUOTE, config->quote);
|
||||||
curl_easy_setopt(curl, CURLOPT_POSTQUOTE, config->postquote);
|
curl_easy_setopt(curl, CURLOPT_POSTQUOTE, config->postquote);
|
||||||
|
@ -33,4 +33,6 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
|
|||||||
test237 test238 test239 test243 test245 test246 test247 test248 test249 \
|
test237 test238 test239 test243 test245 test246 test247 test248 test249 \
|
||||||
test250 test251 test252 test253 test254 test255 test521 test522 test523 \
|
test250 test251 test252 test253 test254 test255 test521 test522 test523 \
|
||||||
test256 test257 test258 test259 test260 test261 test262 test263 test264 \
|
test256 test257 test258 test259 test260 test261 test262 test263 test264 \
|
||||||
test265 test266 test267 test268 test269 test270 test271 test272 test273
|
test265 test266 test267 test268 test269 test270 test271 test272 test273 \
|
||||||
|
test274
|
||||||
|
|
||||||
|
50
tests/data/test274
Normal file
50
tests/data/test274
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<info>
|
||||||
|
<keywords>
|
||||||
|
HTTP
|
||||||
|
HTTP GET
|
||||||
|
followlocation
|
||||||
|
--max-redirs
|
||||||
|
</keywords>
|
||||||
|
</info>
|
||||||
|
# Server-side
|
||||||
|
<reply>
|
||||||
|
<data>
|
||||||
|
HTTP/1.1 301 This is a weirdo text message swsclose
|
||||||
|
Server: test-server/fake
|
||||||
|
Location: data/reply/25
|
||||||
|
Content-Length: 0
|
||||||
|
Connection: close
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</reply>
|
||||||
|
|
||||||
|
# Client-side
|
||||||
|
<client>
|
||||||
|
<server>
|
||||||
|
http
|
||||||
|
</server>
|
||||||
|
<name>
|
||||||
|
HTTP Location: following with --max-redirs 0
|
||||||
|
</name>
|
||||||
|
<command>
|
||||||
|
http://%HOSTIP:%HTTPPORT/want/274 -L --max-redirs 0
|
||||||
|
</command>
|
||||||
|
</client>
|
||||||
|
|
||||||
|
# Verify data after the test has been "shot"
|
||||||
|
<verify>
|
||||||
|
<strip>
|
||||||
|
^User-Agent: curl/.*
|
||||||
|
</strip>
|
||||||
|
<protocol>
|
||||||
|
GET /want/274 HTTP/1.1
|
||||||
|
User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)
|
||||||
|
Host: 127.0.0.1:%HTTPPORT
|
||||||
|
Accept: */*
|
||||||
|
|
||||||
|
</protocol>
|
||||||
|
|
||||||
|
<errorcode>
|
||||||
|
47
|
||||||
|
</errorcode>
|
||||||
|
</verify>
|
Loading…
Reference in New Issue
Block a user