mirror of
https://github.com/curl/curl.git
synced 2026-08-09 21:44:26 +03:00
strtoofft: reduce integer overflow risks globally
... make sure we bail out on overflows. Reported-by: Brian Carpenter Closes #1758
This commit is contained in:
parent
b53b4e4424
commit
ff50fe0348
13 changed files with 196 additions and 131 deletions
|
|
@ -590,7 +590,11 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
|
|||
{
|
||||
/* We support G, M, K too */
|
||||
char *unit;
|
||||
curl_off_t value = curlx_strtoofft(nextarg, &unit, 0);
|
||||
curl_off_t value;
|
||||
if(curlx_strtoofft(nextarg, &unit, 0, &value)) {
|
||||
warnf(global, "unsupported rate\n");
|
||||
return PARAM_BAD_USE;
|
||||
}
|
||||
|
||||
if(!*unit)
|
||||
unit = (char *)"b";
|
||||
|
|
@ -1843,10 +1847,13 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
|
|||
if(ISDIGIT(*nextarg) && !strchr(nextarg, '-')) {
|
||||
char buffer[32];
|
||||
curl_off_t off;
|
||||
if(curlx_strtoofft(nextarg, NULL, 10, &off)) {
|
||||
warnf(global, "unsupported range point\n");
|
||||
return PARAM_BAD_USE;
|
||||
}
|
||||
warnf(global,
|
||||
"A specified range MUST include at least one dash (-). "
|
||||
"Appending one for you!\n");
|
||||
off = curlx_strtoofft(nextarg, NULL, 10);
|
||||
snprintf(buffer, sizeof(buffer), "%" CURL_FORMAT_CURL_OFF_T "-", off);
|
||||
Curl_safefree(config->range);
|
||||
config->range = strdup(buffer);
|
||||
|
|
|
|||
|
|
@ -400,9 +400,13 @@ ParameterError str2offset(curl_off_t *val, const char *str)
|
|||
return PARAM_NEGATIVE_NUMERIC;
|
||||
|
||||
#if(CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG)
|
||||
*val = curlx_strtoofft(str, &endptr, 0);
|
||||
if((*val == CURL_OFF_T_MAX || *val == CURL_OFF_T_MIN) && (errno == ERANGE))
|
||||
return PARAM_NUMBER_TOO_LARGE;
|
||||
{
|
||||
CURLofft offt = curlx_strtoofft(str, &endptr, 0, val);
|
||||
if(CURL_OFFT_FLOW == offt)
|
||||
return PARAM_NUMBER_TOO_LARGE;
|
||||
else if(CURL_OFFT_INVAL == offt)
|
||||
return PARAM_BAD_NUMERIC;
|
||||
}
|
||||
#else
|
||||
errno = 0;
|
||||
*val = strtol(str, &endptr, 0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue