mirror of
https://github.com/curl/curl.git
synced 2026-07-30 07:48:02 +03:00
curl: stop retry if Retry-After: is longer than allowed
If Retry-After: specifies a period that is longer than what fits within --retry-max-time, then stop retrying immediately. Added test 366 to verify. Reported-by: Kari Pahula Fixes #7675 Closes #7676
This commit is contained in:
parent
37fb213a2e
commit
eb2a5171da
3 changed files with 66 additions and 1 deletions
|
|
@ -515,6 +515,21 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
|
|||
sleeptime = LONG_MAX;
|
||||
else
|
||||
sleeptime = (long)retry_after * 1000; /* milliseconds */
|
||||
|
||||
/* if adding retry_after seconds to the process would exceed the
|
||||
maximum time allowed for retrying, then exit the retries right
|
||||
away */
|
||||
if(config->retry_maxtime) {
|
||||
curl_off_t seconds = tvdiff(tvnow(), per->retrystart)/1000;
|
||||
|
||||
if((CURL_OFF_T_MAX - retry_after < seconds) ||
|
||||
(seconds + retry_after > config->retry_maxtime)) {
|
||||
warnf(config->global, "The Retry-After: time would "
|
||||
"make this command line exceed the maximum allowed time "
|
||||
"for retries.");
|
||||
goto noretry;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
warnf(config->global, "Problem %s. "
|
||||
|
|
@ -570,6 +585,7 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
|
|||
return CURLE_OK;
|
||||
}
|
||||
} /* if retry_numretries */
|
||||
noretry:
|
||||
|
||||
if((global->progressmode == CURL_PROGRESS_BAR) &&
|
||||
per->progressbar.calls)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue