Chromium Code Reviews| Index: net/disk_cache/simple/simple_synchronous_entry.cc |
| diff --git a/net/disk_cache/simple/simple_synchronous_entry.cc b/net/disk_cache/simple/simple_synchronous_entry.cc |
| index 1e7b9aa0b96bcd8635fd30fe761b1646c135de33..c50c9a350ec5e2f73ec5d27fd393812cf39b2ed1 100644 |
| --- a/net/disk_cache/simple/simple_synchronous_entry.cc |
| +++ b/net/disk_cache/simple/simple_synchronous_entry.cc |
| @@ -14,6 +14,7 @@ |
| #include "base/files/file_util.h" |
| #include "base/hash.h" |
| #include "base/location.h" |
| +#include "base/numerics/safe_conversions.h" |
| #include "base/sha1.h" |
| #include "base/strings/stringprintf.h" |
| #include "net/base/io_buffer.h" |
| @@ -73,7 +74,7 @@ enum CloseResult { |
| void RecordSyncOpenResult(net::CacheType cache_type, |
| OpenEntryResult result, |
| bool had_index) { |
| - DCHECK_GT(OPEN_ENTRY_MAX, result); |
| + DCHECK_LT(result, OPEN_ENTRY_MAX); |
| SIMPLE_CACHE_UMA(ENUMERATION, |
| "SyncOpenResult", cache_type, result, OPEN_ENTRY_MAX); |
| if (had_index) { |
| @@ -104,8 +105,8 @@ void RecordCloseResult(net::CacheType cache_type, CloseResult result) { |
| } |
| bool CanOmitEmptyFile(int file_index) { |
| - DCHECK_LE(0, file_index); |
| - DCHECK_GT(disk_cache::kSimpleEntryFileCount, file_index); |
| + DCHECK_GE(file_index, 0); |
|
rvargas (doing something else)
2014/10/08 20:01:14
Thanks for fixing all of these.
|
| + DCHECK_LT(file_index, disk_cache::kSimpleEntryFileCount); |
| return file_index == disk_cache::simple_util::GetFileIndexFromStreamIndex(2); |
| } |
| @@ -284,7 +285,7 @@ void SimpleSynchronousEntry::ReadData(const EntryOperationData& in_entry_op, |
| int file_index = GetFileIndexFromStreamIndex(in_entry_op.index); |
| // Zero-length reads and reads to the empty streams of omitted files should |
| // be handled in the SimpleEntryImpl. |
| - DCHECK_LT(0, in_entry_op.buf_len); |
| + DCHECK_GT(in_entry_op.buf_len, 0); |
| DCHECK(!empty_file_omitted_[file_index]); |
| File* file = const_cast<File*>(&files_[file_index]); |
| int bytes_read = |
| @@ -408,19 +409,17 @@ void SimpleSynchronousEntry::ReadSparseData( |
| SparseRange* found_range = &it->second; |
| DCHECK_EQ(it->first, found_range->offset); |
| if (found_range->offset + found_range->length > offset) { |
| - DCHECK_LE(0, found_range->length); |
| - DCHECK_GE(kint32max, found_range->length); |
| - DCHECK_LE(0, offset - found_range->offset); |
| - DCHECK_GE(kint32max, offset - found_range->offset); |
| - int range_len_after_offset = found_range->length - |
| - (offset - found_range->offset); |
| - DCHECK_LE(0, range_len_after_offset); |
| + DCHECK_GE(found_range->length, 0); |
| + DCHECK_LE(found_range->length, kint32max); |
| + DCHECK_GE(offset - found_range->offset, 0); |
| + DCHECK_LE(offset - found_range->offset, kint32max); |
| + int net_offset = static_cast<int>(offset - found_range->offset); |
| + int range_len_after_offset = |
| + static_cast<int>(found_range->length - net_offset); |
| + DCHECK_GE(range_len_after_offset, 0); |
| int len_to_read = std::min(buf_len, range_len_after_offset); |
| - if (!ReadSparseRange(found_range, |
| - offset - found_range->offset, |
| - len_to_read, |
| - buf)) { |
| + if (!ReadSparseRange(found_range, net_offset, len_to_read, buf)) { |
| *out_result = net::ERR_CACHE_READ_FAILURE; |
| return; |
| } |
| @@ -436,8 +435,7 @@ void SimpleSynchronousEntry::ReadSparseData( |
| it->second.offset == offset + read_so_far) { |
| SparseRange* found_range = &it->second; |
| DCHECK_EQ(it->first, found_range->offset); |
| - int range_len = (found_range->length > kint32max) ? |
| - kint32max : found_range->length; |
| + int range_len = base::saturated_cast<int>(found_range->length); |
|
pasko
2015/12/09 18:41:06
Is this actually right?
I am not very familiar wi
Peter Kasting
2015/12/09 22:07:23
saturated_cast is not checked_cast. This change d
|
| int len_to_read = std::min(buf_len - read_so_far, range_len); |
| if (!ReadSparseRange(found_range, 0, len_to_read, buf + read_so_far)) { |
| *out_result = net::ERR_CACHE_READ_FAILURE; |
| @@ -484,19 +482,17 @@ void SimpleSynchronousEntry::WriteSparseData( |
| --it; |
| SparseRange* found_range = &it->second; |
| if (found_range->offset + found_range->length > offset) { |
| - DCHECK_LE(0, found_range->length); |
| - DCHECK_GE(kint32max, found_range->length); |
| - DCHECK_LE(0, offset - found_range->offset); |
| - DCHECK_GE(kint32max, offset - found_range->offset); |
| - int range_len_after_offset = found_range->length - |
| - (offset - found_range->offset); |
| - DCHECK_LE(0, range_len_after_offset); |
| + DCHECK_GE(found_range->length, 0); |
| + DCHECK_LE(found_range->length, kint32max); |
| + DCHECK_GE(offset - found_range->offset, 0); |
| + DCHECK_LE(offset - found_range->offset, kint32max); |
| + int net_offset = static_cast<int>(offset - found_range->offset); |
| + int range_len_after_offset = |
| + static_cast<int>(found_range->length - net_offset); |
| + DCHECK_GE(range_len_after_offset, 0); |
| int len_to_write = std::min(buf_len, range_len_after_offset); |
| - if (!WriteSparseRange(found_range, |
| - offset - found_range->offset, |
| - len_to_write, |
| - buf)) { |
| + if (!WriteSparseRange(found_range, net_offset, len_to_write, buf)) { |
| *out_result = net::ERR_CACHE_WRITE_FAILURE; |
| return; |
| } |
| @@ -510,7 +506,8 @@ void SimpleSynchronousEntry::WriteSparseData( |
| it->second.offset < offset + buf_len) { |
| SparseRange* found_range = &it->second; |
| if (offset + written_so_far < found_range->offset) { |
| - int len_to_append = found_range->offset - (offset + written_so_far); |
| + int len_to_append = |
| + static_cast<int>(found_range->offset - (offset + written_so_far)); |
| if (!AppendSparseRange(offset + written_so_far, |
| len_to_append, |
| buf + written_so_far)) { |
| @@ -520,8 +517,7 @@ void SimpleSynchronousEntry::WriteSparseData( |
| written_so_far += len_to_append; |
| appended_so_far += len_to_append; |
| } |
| - int range_len = (found_range->length > kint32max) ? |
| - kint32max : found_range->length; |
| + int range_len = base::saturated_cast<int>(found_range->length); |
| int len_to_write = std::min(buf_len - written_so_far, range_len); |
| if (!WriteSparseRange(found_range, |
| 0, |
| @@ -567,7 +563,7 @@ void SimpleSynchronousEntry::GetAvailableRange( |
| SparseRangeIterator it = sparse_ranges_.lower_bound(offset); |
| int64 start = offset; |
| - int avail_so_far = 0; |
| + int64 avail_so_far = 0; |
|
Peter Kasting
2014/10/08 19:21:56
The type changes and typecasts inserted in this fi
|
| if (it != sparse_ranges_.end() && it->second.offset < offset + len) |
| start = it->second.offset; |
| @@ -589,9 +585,9 @@ void SimpleSynchronousEntry::GetAvailableRange( |
| ++it; |
| } |
| - int len_from_start = len - (start - offset); |
| + int64 len_from_start = len - (start - offset); |
| *out_start = start; |
| - *out_result = std::min(avail_so_far, len_from_start); |
| + *out_result = static_cast<int>(std::min(avail_so_far, len_from_start)); |
| } |
| void SimpleSynchronousEntry::CheckEOFRecord(int index, |
| @@ -680,7 +676,8 @@ void SimpleSynchronousEntry::Close( |
| const int64 cluster_loss = file_size % 4096 ? 4096 - file_size % 4096 : 0; |
| SIMPLE_CACHE_UMA(PERCENTAGE, |
| "LastClusterLossPercent", cache_type_, |
| - cluster_loss * 100 / (cluster_loss + file_size)); |
| + static_cast<base::HistogramBase::Sample>( |
| + cluster_loss * 100 / (cluster_loss + file_size))); |
| } |
| if (sparse_file_open()) |
| @@ -825,7 +822,7 @@ bool SimpleSynchronousEntry::OpenFiles( |
| // 0, stream 1 and one EOF record. The exact distribution of sizes between |
| // stream 1 and stream 0 is only determined after reading the EOF record |
| // for stream 0 in ReadAndValidateStream0. |
| - out_entry_stat->set_data_size(i + 1, file_info.size); |
| + out_entry_stat->set_data_size(i + 1, static_cast<int>(file_info.size)); |
| } |
| SIMPLE_CACHE_UMA(CUSTOM_COUNTS, |
| "SyncOpenEntryAge", cache_type_, |
| @@ -1159,7 +1156,7 @@ bool SimpleSynchronousEntry::DeleteFilesForEntryHash( |
| void SimpleSynchronousEntry::RecordSyncCreateResult(CreateEntryResult result, |
| bool had_index) { |
| - DCHECK_GT(CREATE_ENTRY_MAX, result); |
| + DCHECK_LT(result, CREATE_ENTRY_MAX); |
| SIMPLE_CACHE_UMA(ENUMERATION, |
| "SyncCreateResult", cache_type_, result, CREATE_ENTRY_MAX); |
| if (had_index) { |
| @@ -1256,7 +1253,7 @@ bool SimpleSynchronousEntry::InitializeSparseFile() { |
| bool SimpleSynchronousEntry::ScanSparseFile(int32* out_sparse_data_size) { |
| DCHECK(sparse_file_open()); |
| - int32 sparse_data_size = 0; |
| + int64 sparse_data_size = 0; |
| SimpleFileHeader header; |
| int header_read_result = |
| @@ -1307,11 +1304,11 @@ bool SimpleSynchronousEntry::ScanSparseFile(int32* out_sparse_data_size) { |
| range_header_offset += sizeof(range_header) + range.length; |
| - DCHECK_LE(sparse_data_size, sparse_data_size + range.length); |
| + DCHECK_GE(sparse_data_size + range.length, sparse_data_size); |
| sparse_data_size += range.length; |
| } |
| - *out_sparse_data_size = sparse_data_size; |
| + *out_sparse_data_size = static_cast<int32>(sparse_data_size); |
| sparse_tail_offset_ = range_header_offset; |
| return true; |
| @@ -1321,8 +1318,8 @@ bool SimpleSynchronousEntry::ReadSparseRange(const SparseRange* range, |
| int offset, int len, char* buf) { |
| DCHECK(range); |
| DCHECK(buf); |
| - DCHECK_GE(range->length, offset); |
| - DCHECK_GE(range->length, offset + len); |
| + DCHECK_LE(offset, range->length); |
| + DCHECK_LE(offset + len, range->length); |
| int bytes_read = sparse_file_.Read(range->file_offset + offset, buf, len); |
| if (bytes_read < len) { |
| @@ -1350,8 +1347,8 @@ bool SimpleSynchronousEntry::WriteSparseRange(SparseRange* range, |
| const char* buf) { |
| DCHECK(range); |
| DCHECK(buf); |
| - DCHECK_GE(range->length, offset); |
| - DCHECK_GE(range->length, offset + len); |
| + DCHECK_LE(offset, range->length); |
| + DCHECK_LE(offset + len, range->length); |
| uint32 new_crc32 = 0; |
| if (offset == 0 && len == range->length) { |
| @@ -1390,8 +1387,8 @@ bool SimpleSynchronousEntry::WriteSparseRange(SparseRange* range, |
| bool SimpleSynchronousEntry::AppendSparseRange(int64 offset, |
| int len, |
| const char* buf) { |
| - DCHECK_LE(0, offset); |
| - DCHECK_LT(0, len); |
| + DCHECK_GE(offset, 0); |
| + DCHECK_GT(len, 0); |
| DCHECK(buf); |
| uint32 data_crc32 = crc32(crc32(0L, Z_NULL, 0), |