diff options
author | Daniel Stenberg <daniel@haxx.se> | 2000-11-28 09:05:47 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2000-11-28 09:05:47 +0000 |
commit | b8f7d94ef15b93c98cda472a32227d84a3ac5f72 (patch) | |
tree | 2e12162cb16881f45601856fb733ad916aea8d16 /lib | |
parent | d4cd079b9cf6d3d8cc278b267b079268df9f11fb (diff) |
James Griffiths' max-redirs fix
Diffstat (limited to 'lib')
-rw-r--r-- | lib/highlevel.c | 10 | ||||
-rw-r--r-- | lib/url.c | 3 | ||||
-rw-r--r-- | lib/urldata.h | 1 |
3 files changed, 12 insertions, 2 deletions
diff --git a/lib/highlevel.c b/lib/highlevel.c index dc7acc130..b3bb9e157 100644 --- a/lib/highlevel.c +++ b/lib/highlevel.c @@ -624,11 +624,17 @@ CURLcode curl_transfer(CURL *curl) if((res == CURLE_OK) && data->newurl) { /* Location: redirect - + This is assumed to happen for HTTP(S) only! - */ + */ char prot[16]; char path[URL_MAX_LENGTH]; + if (data->maxredirs && (data->followlocation >= data->maxredirs)) { + failf(data,"Maximum (%d) redirects followed", data->maxredirs); + curl_disconnect(c_connect); + res=CURLE_TOO_MANY_REDIRECTS; + break; + } /* mark the next request as a followed location: */ data->bits.this_is_a_follow = TRUE; @@ -478,6 +478,9 @@ CURLcode curl_setopt(CURL *curl, CURLoption option, ...) case CURLOPT_TIMEOUT: data->timeout = va_arg(param, long); break; + case CURLOPT_MAXREDIRS: + data->maxredirs = va_arg(param, long); + break; case CURLOPT_USERAGENT: data->useragent = va_arg(param, char *); break; diff --git a/lib/urldata.h b/lib/urldata.h index a0df9b4ff..45b632bbf 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -417,6 +417,7 @@ struct UrlData { /* stuff related to HTTP */ long followlocation; + long maxredirs; /* maximum no. of http(s) redirects to follow */ char *referer; bool free_referer; /* set TRUE if 'referer' points to a string we allocated */ |