Chromium Code Reviews| Index: net/disk_cache/simple/simple_test_util.cc |
| diff --git a/net/disk_cache/simple/simple_test_util.cc b/net/disk_cache/simple/simple_test_util.cc |
| index 2d3edcb22a16e5576afb8257824ab112b3fed8cb..09cbd5071d860818c964fa60136a68ecbf56344e 100644 |
| --- a/net/disk_cache/simple/simple_test_util.cc |
| +++ b/net/disk_cache/simple/simple_test_util.cc |
| @@ -6,17 +6,22 @@ |
| #include "base/files/file.h" |
| #include "base/files/file_path.h" |
| +#include "net/base/hash_value.h" |
| +#include "net/disk_cache/simple/simple_entry_format.h" |
| #include "net/disk_cache/simple/simple_util.h" |
| namespace disk_cache { |
| namespace simple_util { |
| +using base::File; |
| +using base::FilePath; |
| + |
| bool CreateCorruptFileForTests(const std::string& key, |
| - const base::FilePath& cache_path) { |
| - base::FilePath entry_file_path = cache_path.AppendASCII( |
| + const FilePath& cache_path) { |
| + FilePath entry_file_path = cache_path.AppendASCII( |
| disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0)); |
| - int flags = base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE; |
| - base::File entry_file(entry_file_path, flags); |
| + int flags = File::FLAG_CREATE_ALWAYS | File::FLAG_WRITE; |
| + File entry_file(entry_file_path, flags); |
| if (!entry_file.IsValid()) |
| return false; |
| @@ -24,5 +29,70 @@ bool CreateCorruptFileForTests(const std::string& key, |
| return entry_file.Write(0, "dummy", 1) == 1; |
| } |
| +bool RemoveKeySHA256FromEntry(const std::string& key, |
| + const FilePath& cache_path) { |
| + FilePath entry_file_path = cache_path.AppendASCII( |
| + disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0)); |
| + int flags = File::FLAG_OPEN | File::FLAG_READ | File::FLAG_WRITE; |
| + File entry_file(entry_file_path, flags); |
| + if (!entry_file.IsValid()) |
| + return false; |
| + int file_length = entry_file.GetLength(); |
| + SimpleFileEOF eof_record; |
| + if (entry_file.Read(file_length - sizeof(eof_record), |
| + reinterpret_cast<char*>(&eof_record), |
| + sizeof(eof_record)) != sizeof(eof_record)) { |
| + return false; |
| + } |
| + if (eof_record.final_magic_number != disk_cache::kSimpleFinalMagicNumber || |
| + (eof_record.flags & SimpleFileEOF::FLAG_HAS_KEY_SHA256) != |
| + SimpleFileEOF::FLAG_HAS_KEY_SHA256) { |
| + return false; |
| + } |
| + eof_record.flags &= ~SimpleFileEOF::FLAG_HAS_KEY_SHA256; |
| + if (entry_file.Write( |
| + file_length - sizeof(eof_record) - sizeof(net::SHA256HashValue), |
|
Randy Smith (Not in Mondays)
2016/05/19 19:38:50
Comment calling out that record is being moved bac
gavinp
2016/05/20 01:42:32
Done.
|
| + reinterpret_cast<char*>(&eof_record), |
| + sizeof(eof_record)) != sizeof(eof_record)) { |
| + return false; |
| + } |
| + if (!entry_file.SetLength(file_length - sizeof(net::SHA256HashValue))) { |
| + return false; |
| + } |
| + return true; |
| +} |
| + |
| +bool CorruptKeySHA256FromEntry(const std::string& key, |
| + const base::FilePath& cache_path) { |
| + FilePath entry_file_path = cache_path.AppendASCII( |
| + disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0)); |
| + int flags = File::FLAG_OPEN | File::FLAG_READ | File::FLAG_WRITE; |
| + File entry_file(entry_file_path, flags); |
| + if (!entry_file.IsValid()) |
| + return false; |
| + int file_length = entry_file.GetLength(); |
| + SimpleFileEOF eof_record; |
| + if (entry_file.Read(file_length - sizeof(eof_record), |
| + reinterpret_cast<char*>(&eof_record), |
| + sizeof(eof_record)) != sizeof(eof_record)) { |
| + return false; |
| + } |
| + if (eof_record.final_magic_number != disk_cache::kSimpleFinalMagicNumber || |
| + (eof_record.flags & SimpleFileEOF::FLAG_HAS_KEY_SHA256) != |
| + SimpleFileEOF::FLAG_HAS_KEY_SHA256) { |
| + return false; |
| + } |
| + |
| + const char corrupt_data[] = "corrupt data"; |
| + static_assert(sizeof(corrupt_data) <= sizeof(net::SHA256HashValue), |
| + "corrupt data should not be larger than a SHA-256"); |
| + if (entry_file.Write( |
| + file_length - sizeof(eof_record) - sizeof(net::SHA256HashValue), |
| + corrupt_data, sizeof(corrupt_data)) != sizeof(corrupt_data)) { |
| + return false; |
| + } |
| + return true; |
| +} |
| + |
| } // namespace simple_util |
| } // namespace disk_cache |