Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: third_party/hunspell/google/bdict_reader.cc

Issue 4409002: Add a MD5 checksum to the BDIC header.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/
Patch Set: '' Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/hunspell/google/bdict.cc ('k') | third_party/hunspell/google/bdict_writer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2008 Google Inc. All Rights Reserved. 1 // Copyright 2008 Google Inc. All Rights Reserved.
2 2
3 #include "third_party/hunspell/google/bdict_reader.h" 3 #include "third_party/hunspell/google/bdict_reader.h"
4 4
5 #include "base/logging.h" 5 #include "base/logging.h"
6 6
7 namespace hunspell { 7 namespace hunspell {
8 8
9 // Like the "Visitor" design pattern, this lightweight object provides an 9 // Like the "Visitor" design pattern, this lightweight object provides an
10 // interface around a serialized trie node at the given address in the memory. 10 // interface around a serialized trie node at the given address in the memory.
(...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 header_(NULL) { 642 header_(NULL) {
643 } 643 }
644 644
645 bool BDictReader::Init(const unsigned char* bdict_data, size_t bdict_length) { 645 bool BDictReader::Init(const unsigned char* bdict_data, size_t bdict_length) {
646 if (bdict_length < sizeof(BDict::Header)) 646 if (bdict_length < sizeof(BDict::Header))
647 return false; 647 return false;
648 648
649 // Check header. 649 // Check header.
650 header_ = reinterpret_cast<const BDict::Header*>(bdict_data); 650 header_ = reinterpret_cast<const BDict::Header*>(bdict_data);
651 if (header_->signature != BDict::SIGNATURE || 651 if (header_->signature != BDict::SIGNATURE ||
652 header_->major_version != 1 || 652 header_->major_version > BDict::MAJOR_VERSION ||
653 header_->aff_offset > bdict_length ||
654 header_->dic_offset > bdict_length) 653 header_->dic_offset > bdict_length)
655 return false; 654 return false;
656 655
657 // Get the affix header, make sure there is enough room for it. 656 // Get the affix header, make sure there is enough room for it.
658 if (header_->aff_offset + sizeof(BDict::AffHeader) > bdict_length) 657 if (header_->aff_offset + sizeof(BDict::AffHeader) > bdict_length)
659 return false; 658 return false;
660 aff_header_ = reinterpret_cast<const BDict::AffHeader*>( 659 aff_header_ = reinterpret_cast<const BDict::AffHeader*>(
661 &bdict_data[header_->aff_offset]); 660 &bdict_data[header_->aff_offset]);
662 661
663 // Make sure there is enough room for the affix group count dword. 662 // Make sure there is enough room for the affix group count dword.
664 if (aff_header_->affix_group_offset + sizeof(uint32) > bdict_length) 663 if (aff_header_->affix_group_offset + sizeof(uint32) > bdict_length)
665 return false; 664 return false;
666 665
666 // This function is called from SpellCheck::SpellCheckWord(), which blocks
667 // WebKit. To avoid blocking WebKit for a long time, we do not check the MD5
668 // digest here. Instead we check the MD5 digest when Chrome finishes
669 // downloading a dictionary.
670
667 // Don't set these until the end. This way, NULL bdict_data_ will indicate 671 // Don't set these until the end. This way, NULL bdict_data_ will indicate
668 // failure. 672 // failure.
669 bdict_data_ = bdict_data; 673 bdict_data_ = bdict_data;
670 bdict_length_ = bdict_length; 674 bdict_length_ = bdict_length;
671 return true; 675 return true;
672 } 676 }
673 677
674 int BDictReader::FindWord( 678 int BDictReader::FindWord(
675 const char* word, 679 const char* word,
676 int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const { 680 int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 aff_header_->rep_offset); 722 aff_header_->rep_offset);
719 } 723 }
720 724
721 725
722 WordIterator BDictReader::GetAllWordIterator() const { 726 WordIterator BDictReader::GetAllWordIterator() const {
723 NodeReader reader(bdict_data_, bdict_length_, header_->dic_offset, 0); 727 NodeReader reader(bdict_data_, bdict_length_, header_->dic_offset, 0);
724 return WordIterator(reader); 728 return WordIterator(reader);
725 } 729 }
726 730
727 } // namespace hunspell 731 } // namespace hunspell
OLDNEW
« no previous file with comments | « third_party/hunspell/google/bdict.cc ('k') | third_party/hunspell/google/bdict_writer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698