OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/disk_cache/blockfile/entry_impl.h" | 5 #include "net/disk_cache/blockfile/entry_impl.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/hash.h" | 9 #include "base/hash.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 return false; | 585 return false; |
586 | 586 |
587 if (stored->reuse_count < 0 || stored->refetch_count < 0) | 587 if (stored->reuse_count < 0 || stored->refetch_count < 0) |
588 return false; | 588 return false; |
589 | 589 |
590 Addr rankings_addr(stored->rankings_node); | 590 Addr rankings_addr(stored->rankings_node); |
591 if (!rankings_addr.SanityCheckForRankings()) | 591 if (!rankings_addr.SanityCheckForRankings()) |
592 return false; | 592 return false; |
593 | 593 |
594 Addr next_addr(stored->next); | 594 Addr next_addr(stored->next); |
595 if (next_addr.is_initialized() && !next_addr.SanityCheckForEntryV2()) { | 595 if (next_addr.is_initialized() && !next_addr.SanityCheckForEntry()) { |
596 STRESS_NOTREACHED(); | 596 STRESS_NOTREACHED(); |
597 return false; | 597 return false; |
598 } | 598 } |
599 STRESS_DCHECK(next_addr.value() != entry_.address().value()); | 599 STRESS_DCHECK(next_addr.value() != entry_.address().value()); |
600 | 600 |
601 if (stored->state > ENTRY_DOOMED || stored->state < ENTRY_NORMAL) | 601 if (stored->state > ENTRY_DOOMED || stored->state < ENTRY_NORMAL) |
602 return false; | 602 return false; |
603 | 603 |
604 Addr key_addr(stored->long_key); | 604 Addr key_addr(stored->long_key); |
605 if ((stored->key_len <= kMaxInternalKeyLength && key_addr.is_initialized()) || | 605 if ((stored->key_len <= kMaxInternalKeyLength && key_addr.is_initialized()) || |
606 (stored->key_len > kMaxInternalKeyLength && !key_addr.is_initialized())) | 606 (stored->key_len > kMaxInternalKeyLength && !key_addr.is_initialized())) |
607 return false; | 607 return false; |
608 | 608 |
609 if (!key_addr.SanityCheckV2()) | 609 if (!key_addr.SanityCheck()) |
610 return false; | 610 return false; |
611 | 611 |
612 if (key_addr.is_initialized() && | 612 if (key_addr.is_initialized() && |
613 ((stored->key_len < kMaxBlockSize && key_addr.is_separate_file()) || | 613 ((stored->key_len < kMaxBlockSize && key_addr.is_separate_file()) || |
614 (stored->key_len >= kMaxBlockSize && key_addr.is_block_file()))) | 614 (stored->key_len >= kMaxBlockSize && key_addr.is_block_file()))) |
615 return false; | 615 return false; |
616 | 616 |
617 int num_blocks = NumBlocksForEntry(stored->key_len); | 617 int num_blocks = NumBlocksForEntry(stored->key_len); |
618 if (entry_.address().num_blocks() != num_blocks) | 618 if (entry_.address().num_blocks() != num_blocks) |
619 return false; | 619 return false; |
(...skipping 12 matching lines...) Expand all Loading... |
632 if (stored->hash != base::Hash(GetKey())) | 632 if (stored->hash != base::Hash(GetKey())) |
633 return false; | 633 return false; |
634 | 634 |
635 for (int i = 0; i < kNumStreams; i++) { | 635 for (int i = 0; i < kNumStreams; i++) { |
636 Addr data_addr(stored->data_addr[i]); | 636 Addr data_addr(stored->data_addr[i]); |
637 int data_size = stored->data_size[i]; | 637 int data_size = stored->data_size[i]; |
638 if (data_size < 0) | 638 if (data_size < 0) |
639 return false; | 639 return false; |
640 if (!data_size && data_addr.is_initialized()) | 640 if (!data_size && data_addr.is_initialized()) |
641 return false; | 641 return false; |
642 if (!data_addr.SanityCheckV2()) | 642 if (!data_addr.SanityCheck()) |
643 return false; | 643 return false; |
644 if (!data_size) | 644 if (!data_size) |
645 continue; | 645 continue; |
646 if (data_size <= kMaxBlockSize && data_addr.is_separate_file()) | 646 if (data_size <= kMaxBlockSize && data_addr.is_separate_file()) |
647 return false; | 647 return false; |
648 if (data_size > kMaxBlockSize && data_addr.is_block_file()) | 648 if (data_size > kMaxBlockSize && data_addr.is_block_file()) |
649 return false; | 649 return false; |
650 } | 650 } |
651 return true; | 651 return true; |
652 } | 652 } |
653 | 653 |
654 void EntryImpl::FixForDelete() { | 654 void EntryImpl::FixForDelete() { |
655 EntryStore* stored = entry_.Data(); | 655 EntryStore* stored = entry_.Data(); |
656 Addr key_addr(stored->long_key); | 656 Addr key_addr(stored->long_key); |
657 | 657 |
658 if (!key_addr.is_initialized()) | 658 if (!key_addr.is_initialized()) |
659 stored->key[stored->key_len] = '\0'; | 659 stored->key[stored->key_len] = '\0'; |
660 | 660 |
661 for (int i = 0; i < kNumStreams; i++) { | 661 for (int i = 0; i < kNumStreams; i++) { |
662 Addr data_addr(stored->data_addr[i]); | 662 Addr data_addr(stored->data_addr[i]); |
663 int data_size = stored->data_size[i]; | 663 int data_size = stored->data_size[i]; |
664 if (data_addr.is_initialized()) { | 664 if (data_addr.is_initialized()) { |
665 if ((data_size <= kMaxBlockSize && data_addr.is_separate_file()) || | 665 if ((data_size <= kMaxBlockSize && data_addr.is_separate_file()) || |
666 (data_size > kMaxBlockSize && data_addr.is_block_file()) || | 666 (data_size > kMaxBlockSize && data_addr.is_block_file()) || |
667 !data_addr.SanityCheckV2()) { | 667 !data_addr.SanityCheck()) { |
668 STRESS_NOTREACHED(); | 668 STRESS_NOTREACHED(); |
669 // The address is weird so don't attempt to delete it. | 669 // The address is weird so don't attempt to delete it. |
670 stored->data_addr[i] = 0; | 670 stored->data_addr[i] = 0; |
671 // In general, trust the stored size as it should be in sync with the | 671 // In general, trust the stored size as it should be in sync with the |
672 // total size tracked by the backend. | 672 // total size tracked by the backend. |
673 } | 673 } |
674 } | 674 } |
675 if (data_size < 0) | 675 if (data_size < 0) |
676 stored->data_size[i] = 0; | 676 stored->data_size[i] = 0; |
677 } | 677 } |
(...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1558 Trace("%s 0x%p 0x%x 0x%x", msg, reinterpret_cast<void*>(this), | 1558 Trace("%s 0x%p 0x%x 0x%x", msg, reinterpret_cast<void*>(this), |
1559 entry_.address().value(), node_.address().value()); | 1559 entry_.address().value(), node_.address().value()); |
1560 | 1560 |
1561 Trace(" data: 0x%x 0x%x 0x%x", entry_.Data()->data_addr[0], | 1561 Trace(" data: 0x%x 0x%x 0x%x", entry_.Data()->data_addr[0], |
1562 entry_.Data()->data_addr[1], entry_.Data()->long_key); | 1562 entry_.Data()->data_addr[1], entry_.Data()->long_key); |
1563 | 1563 |
1564 Trace(" doomed: %d 0x%x", doomed_, dirty); | 1564 Trace(" doomed: %d 0x%x", doomed_, dirty); |
1565 } | 1565 } |
1566 | 1566 |
1567 } // namespace disk_cache | 1567 } // namespace disk_cache |
OLD | NEW |