Index: net/disk_cache/flash/segment.cc |
diff --git a/net/disk_cache/flash/segment.cc b/net/disk_cache/flash/segment.cc |
index a63a5a39985d077b7eca9393321204e57eddfa0f..b00b38a5209c64fac7fdca02727170d41ccbe0c8 100644 |
--- a/net/disk_cache/flash/segment.cc |
+++ b/net/disk_cache/flash/segment.cc |
@@ -18,17 +18,19 @@ Segment::Segment(int32 index, bool read_only, Storage* storage) |
write_offset_(offset_) { |
DCHECK(storage); |
DCHECK(storage->size() % kFlashSegmentSize == 0); |
- DCHECK(offset_ >= 0 && offset_ + kFlashSegmentSize <= storage->size()); |
} |
Segment::~Segment() { |
- DCHECK(read_only_); |
+ DCHECK(!init_ || read_only_); |
} |
bool Segment::Init() { |
if (init_) |
return false; |
+ if (offset_ < 0 || offset_ + kFlashSegmentSize > storage_->size()) |
+ return false; |
+ |
if (!read_only_) { |
init_ = true; |
return true; |
@@ -82,6 +84,7 @@ bool Segment::Close() { |
DCHECK(header_offsets_.size() <= kFlashMaxEntryCount); |
int32 summary[kFlashMaxEntryCount + 1]; |
+ memset(summary, 0, kFlashSummarySize); |
summary[0] = header_offsets_.size(); |
std::copy(header_offsets_.begin(), header_offsets_.end(), summary + 1); |
if (!storage_->Write(summary, kFlashSummarySize, summary_offset_)) |