const uint8_t* buf = file_buf;
uint32_t start_offset = get_fat_offset(current_sector);
- if ((start_offset + sector_size) > buf_len)
+ // Integer overflow check
+ if (start_offset + sector_size < start_offset || (start_offset + sector_size) > buf_len)
return;
buf += start_offset;
current_sector = fat_sector;
while (current_sector > INVALID_SECTOR)
{
- uint32_t byte_offset = OLE_HEADER_LEN + (current_sector * header->get_sector_size());
+ uint32_t sector_size = header->get_sector_size();
+ uint32_t byte_offset = OLE_HEADER_LEN + (current_sector * sector_size);
- const uint8_t* buf = file_buf;
+ // Integer overflow check
+ if (byte_offset + sector_size < byte_offset || (byte_offset + sector_size) > buf_len)
+ return;
+ const uint8_t* buf = file_buf;
buf += byte_offset;
if ((byte_offset + header->get_sector_size()) > buf_len)
int32_t minfat_curr_cnt = 0;
while (current_sector > INVALID_SECTOR)
{
- uint32_t byte_offset = OLE_HEADER_LEN + (current_sector * header->get_sector_size());
+ uint32_t sector_size = header->get_sector_size();
+ uint32_t byte_offset = OLE_HEADER_LEN + (current_sector * sector_size);
- if ((byte_offset + header->get_sector_size()) > buf_len)
+ // Integer overflow check
+ if (byte_offset + sector_size < byte_offset || (byte_offset + sector_size) > buf_len)
return;
const uint8_t* buf = file_buf;
-
buf += byte_offset;
while ((count - (minfat_curr_cnt * max_secchain_cnt)) < max_secchain_cnt and count < mini_fat_list_len)