mirror of
https://github.com/curl/curl.git
synced 2026-08-25 21:23:32 +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
|
|
@ -609,16 +609,18 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
|
|||
char *p;
|
||||
curl_off_t fsize;
|
||||
finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
|
||||
fsize = curlx_strtoofft(finfo->b_data+parser->item_offset, &p, 10);
|
||||
if(p[0] == '\0' && fsize != CURL_OFF_T_MAX &&
|
||||
fsize != CURL_OFF_T_MIN) {
|
||||
parser->file_data->info.flags |= CURLFINFOFLAG_KNOWN_SIZE;
|
||||
parser->file_data->info.size = fsize;
|
||||
if(!curlx_strtoofft(finfo->b_data+parser->item_offset,
|
||||
&p, 10, &fsize)) {
|
||||
if(p[0] == '\0' && fsize != CURL_OFF_T_MAX &&
|
||||
fsize != CURL_OFF_T_MIN) {
|
||||
parser->file_data->info.flags |= CURLFINFOFLAG_KNOWN_SIZE;
|
||||
parser->file_data->info.size = fsize;
|
||||
}
|
||||
parser->item_length = 0;
|
||||
parser->item_offset = 0;
|
||||
parser->state.UNIX.main = PL_UNIX_TIME;
|
||||
parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART1;
|
||||
}
|
||||
parser->item_length = 0;
|
||||
parser->item_offset = 0;
|
||||
parser->state.UNIX.main = PL_UNIX_TIME;
|
||||
parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART1;
|
||||
}
|
||||
else if(!ISDIGIT(c)) {
|
||||
PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
|
||||
|
|
@ -935,19 +937,9 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
|
|||
}
|
||||
else {
|
||||
char *endptr;
|
||||
finfo->size = curlx_strtoofft(finfo->b_data +
|
||||
parser->item_offset,
|
||||
&endptr, 10);
|
||||
if(!*endptr) {
|
||||
if(finfo->size == CURL_OFF_T_MAX ||
|
||||
finfo->size == CURL_OFF_T_MIN) {
|
||||
if(errno == ERANGE) {
|
||||
PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
|
||||
return bufflen;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(curlx_strtoofft(finfo->b_data +
|
||||
parser->item_offset,
|
||||
&endptr, 10, &finfo->size)) {
|
||||
PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
|
||||
return bufflen;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue