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 // Program to test the SafeBrowsing protocol parsing v2.1. | 5 // Program to test the SafeBrowsing protocol parsing v2.1. |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 | 173 |
174 const SBChunkHost& host0 = chunks[0].hosts[0]; | 174 const SBChunkHost& host0 = chunks[0].hosts[0]; |
175 EXPECT_EQ(host0.host, 0x61616161); | 175 EXPECT_EQ(host0.host, 0x61616161); |
176 EXPECT_EQ(host0.entry->prefix_count(), 255); | 176 EXPECT_EQ(host0.entry->prefix_count(), 255); |
177 | 177 |
178 const SBChunkHost& host1 = chunks[0].hosts[1]; | 178 const SBChunkHost& host1 = chunks[0].hosts[1]; |
179 EXPECT_EQ(host1.host, 0x61616161); | 179 EXPECT_EQ(host1.host, 0x61616161); |
180 EXPECT_EQ(host1.entry->prefix_count(), 5); | 180 EXPECT_EQ(host1.entry->prefix_count(), 5); |
181 } | 181 } |
182 | 182 |
183 // Test to make sure we could deal with truncated bin hash chunk. | 183 // Test to make sure we could deal with truncated goog-*-digestvar chunk. |
184 TEST(SafeBrowsingProtocolParsingTest, TestTruncatedBinHashChunk) { | 184 TEST(SafeBrowsingProtocolParsingTest, TestTruncatedHashChunk) { |
185 // This chunk delares there are 4 prefixes but actually only contains 2. | 185 // This chunk delares there are 4 prefixes but actually only contains 2. |
186 const char add_chunk[] = "a:1:4:16\n11112222"; | 186 const char add_chunk[] = "a:1:4:16\n11112222"; |
187 SafeBrowsingProtocolParser parser; | 187 SafeBrowsingProtocolParser parser; |
188 SBChunkList chunks; | 188 SBChunkList chunks; |
189 bool result = parser.ParseChunk(safe_browsing_util::kBinHashList, | 189 bool result = parser.ParseChunk(safe_browsing_util::kExtensionBlacklist, |
190 add_chunk, | 190 add_chunk, |
191 static_cast<int>(sizeof(add_chunk)), | 191 static_cast<int>(sizeof(add_chunk)), |
192 &chunks); | 192 &chunks); |
193 EXPECT_FALSE(result); | 193 EXPECT_FALSE(result); |
194 EXPECT_EQ(chunks.size(), 0U); | 194 EXPECT_EQ(chunks.size(), 0U); |
195 } | 195 } |
196 | 196 |
197 // Test to make sure we could deal with truncated malwarelist chunk. | 197 // Test to make sure we could deal with truncated malwarelist chunk. |
198 TEST(SafeBrowsingProtocolParsingTest, TestTruncatedUrlHashChunk) { | 198 TEST(SafeBrowsingProtocolParsingTest, TestTruncatedUrlHashChunk) { |
199 // This chunk delares there are 4 prefixes but actually only contains 2. | 199 // This chunk delares there are 4 prefixes but actually only contains 2. |
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 EXPECT_EQ(chunks[2].hosts[1].entry->ChunkIdAtPrefix(0), 0x35363738); | 634 EXPECT_EQ(chunks[2].hosts[1].entry->ChunkIdAtPrefix(0), 0x35363738); |
635 } | 635 } |
636 | 636 |
637 TEST(SafeBrowsingProtocolParsingTest, TestAddBinHashChunks) { | 637 TEST(SafeBrowsingProtocolParsingTest, TestAddBinHashChunks) { |
638 std::string add_chunk("a:1:4:16\naaaabbbbccccdddd" | 638 std::string add_chunk("a:1:4:16\naaaabbbbccccdddd" |
639 "a:2:4:8\n11112222"); | 639 "a:2:4:8\n11112222"); |
640 // Run the parse. | 640 // Run the parse. |
641 SafeBrowsingProtocolParser parser; | 641 SafeBrowsingProtocolParser parser; |
642 SBChunkList chunks; | 642 SBChunkList chunks; |
643 bool result = parser.ParseChunk( | 643 bool result = parser.ParseChunk( |
644 safe_browsing_util::kBinHashList, | 644 safe_browsing_util::kExtensionBlacklist, |
645 add_chunk.data(), | 645 add_chunk.data(), |
646 static_cast<int>(add_chunk.length()), | 646 static_cast<int>(add_chunk.length()), |
647 &chunks); | 647 &chunks); |
648 EXPECT_TRUE(result); | 648 EXPECT_TRUE(result); |
649 EXPECT_EQ(chunks.size(), 2U); | 649 EXPECT_EQ(chunks.size(), 2U); |
650 EXPECT_EQ(chunks[0].chunk_number, 1); | 650 EXPECT_EQ(chunks[0].chunk_number, 1); |
651 EXPECT_EQ(chunks[0].hosts.size(), 1U); | 651 EXPECT_EQ(chunks[0].hosts.size(), 1U); |
652 | 652 |
653 EXPECT_EQ(chunks[0].hosts[0].host, 0); | 653 EXPECT_EQ(chunks[0].hosts[0].host, 0); |
654 SBEntry* entry = chunks[0].hosts[0].entry; | 654 SBEntry* entry = chunks[0].hosts[0].entry; |
(...skipping 15 matching lines...) Expand all Loading... |
670 | 670 |
671 // Test parsing one add chunk where a hostkey spans several entries. | 671 // Test parsing one add chunk where a hostkey spans several entries. |
672 TEST(SafeBrowsingProtocolParsingTest, TestAddBigBinHashChunk) { | 672 TEST(SafeBrowsingProtocolParsingTest, TestAddBigBinHashChunk) { |
673 std::string add_chunk("a:1:4:1028\n"); | 673 std::string add_chunk("a:1:4:1028\n"); |
674 for (int i = 0; i < 257; ++i) | 674 for (int i = 0; i < 257; ++i) |
675 add_chunk.append(base::StringPrintf("%04d", i)); | 675 add_chunk.append(base::StringPrintf("%04d", i)); |
676 | 676 |
677 SafeBrowsingProtocolParser parser; | 677 SafeBrowsingProtocolParser parser; |
678 SBChunkList chunks; | 678 SBChunkList chunks; |
679 bool result = parser.ParseChunk( | 679 bool result = parser.ParseChunk( |
680 safe_browsing_util::kBinHashList, | 680 safe_browsing_util::kExtensionBlacklist, |
681 add_chunk.data(), | 681 add_chunk.data(), |
682 static_cast<int>(add_chunk.length()), | 682 static_cast<int>(add_chunk.length()), |
683 &chunks); | 683 &chunks); |
684 EXPECT_TRUE(result); | 684 EXPECT_TRUE(result); |
685 EXPECT_EQ(chunks.size(), 1U); | 685 EXPECT_EQ(chunks.size(), 1U); |
686 EXPECT_EQ(chunks[0].chunk_number, 1); | 686 EXPECT_EQ(chunks[0].chunk_number, 1); |
687 | 687 |
688 EXPECT_EQ(chunks[0].hosts.size(), 1U); | 688 EXPECT_EQ(chunks[0].hosts.size(), 1U); |
689 | 689 |
690 const SBChunkHost& host0 = chunks[0].hosts[0]; | 690 const SBChunkHost& host0 = chunks[0].hosts[0]; |
691 EXPECT_EQ(host0.host, 0); | 691 EXPECT_EQ(host0.host, 0); |
692 EXPECT_EQ(host0.entry->prefix_count(), 257); | 692 EXPECT_EQ(host0.entry->prefix_count(), 257); |
693 } | 693 } |
694 | 694 |
695 // Test parsing one sub chunk. | 695 // Test parsing one sub chunk. |
696 TEST(SafeBrowsingProtocolParsingTest, TestSubBinHashChunk) { | 696 TEST(SafeBrowsingProtocolParsingTest, TestSubBinHashChunk) { |
697 std::string sub_chunk("s:9:4:16\n1111mmmm2222nnnn"); | 697 std::string sub_chunk("s:9:4:16\n1111mmmm2222nnnn"); |
698 | 698 |
699 // Run the parser. | 699 // Run the parser. |
700 SafeBrowsingProtocolParser parser; | 700 SafeBrowsingProtocolParser parser; |
701 SBChunkList chunks; | 701 SBChunkList chunks; |
702 bool result = parser.ParseChunk( | 702 bool result = parser.ParseChunk( |
703 safe_browsing_util::kBinHashList, | 703 safe_browsing_util::kExtensionBlacklist, |
704 sub_chunk.data(), | 704 sub_chunk.data(), |
705 static_cast<int>(sub_chunk.length()), | 705 static_cast<int>(sub_chunk.length()), |
706 &chunks); | 706 &chunks); |
707 EXPECT_TRUE(result); | 707 EXPECT_TRUE(result); |
708 EXPECT_EQ(chunks.size(), 1U); | 708 EXPECT_EQ(chunks.size(), 1U); |
709 EXPECT_EQ(chunks[0].chunk_number, 9); | 709 EXPECT_EQ(chunks[0].chunk_number, 9); |
710 EXPECT_EQ(chunks[0].hosts.size(), 1U); | 710 EXPECT_EQ(chunks[0].hosts.size(), 1U); |
711 | 711 |
712 EXPECT_EQ(chunks[0].hosts[0].host, 0); | 712 EXPECT_EQ(chunks[0].hosts[0].host, 0); |
713 SBEntry* entry = chunks[0].hosts[0].entry; | 713 SBEntry* entry = chunks[0].hosts[0].entry; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
796 "{\xd7\x01\xad\xa6\xb5""X\xbb\xcf""F\xcf\x00\xf7""A\xbd" | 796 "{\xd7\x01\xad\xa6\xb5""X\xbb\xcf""F\xcf\x00\xf7""A\xbd" |
797 "p\x00\xab\xd7\x89\xd3\x00", 48); | 797 "p\x00\xab\xd7\x89\xd3\x00", 48); |
798 add_testdata[safe_browsing_util::kPhishingList] = std::string( | 798 add_testdata[safe_browsing_util::kPhishingList] = std::string( |
799 "a:301377:4:9\n\xdb\xe0\xaa\x8e\x01\x85\xba\xb2\x9e", 22); | 799 "a:301377:4:9\n\xdb\xe0\xaa\x8e\x01\x85\xba\xb2\x9e", 22); |
800 add_testdata[safe_browsing_util::kBinUrlList] = std::string( | 800 add_testdata[safe_browsing_util::kBinUrlList] = std::string( |
801 "a:19420:4:18\n_\x92\x9e\xcd\x01\x03""}I\xa2\\3\xe6""h\x01\xee" | 801 "a:19420:4:18\n_\x92\x9e\xcd\x01\x03""}I\xa2\\3\xe6""h\x01\xee" |
802 "H\xf6\xe4", 31); | 802 "H\xf6\xe4", 31); |
803 add_testdata[safe_browsing_util::kSideEffectFreeWhitelist] = std::string( | 803 add_testdata[safe_browsing_util::kSideEffectFreeWhitelist] = std::string( |
804 "a:1818:4:9\n\x85\xd0\xfe""i\x01""}\x98\xb1\xe5", 20); | 804 "a:1818:4:9\n\x85\xd0\xfe""i\x01""}\x98\xb1\xe5", 20); |
805 // goog-*-digestvar lists have no host-key data. | 805 // goog-*-digestvar lists have no host-key data. |
806 add_testdata[safe_browsing_util::kBinHashList] = std::string( | |
807 "a:5:4:4\nBBBB", 12); | |
808 add_testdata[safe_browsing_util::kExtensionBlacklist] = std::string( | 806 add_testdata[safe_browsing_util::kExtensionBlacklist] = std::string( |
809 "a:81:4:8\nhleedfcc", 17); | 807 "a:81:4:8\nhleedfcc", 17); |
810 // goog-*-sha256 lists have host-keys but they only contains | 808 // goog-*-sha256 lists have host-keys but they only contains |
811 // full-length entires. | 809 // full-length entires. |
812 add_testdata[safe_browsing_util::kCsdWhiteList] = std::string( | 810 add_testdata[safe_browsing_util::kCsdWhiteList] = std::string( |
813 "a:35:32:37\n\x06\xf9\xb1\xaf\x01\x06\xf9\xb1\xaf""5\xc""9!\x17\x1e" | 811 "a:35:32:37\n\x06\xf9\xb1\xaf\x01\x06\xf9\xb1\xaf""5\xc""9!\x17\x1e" |
814 "*-\xc9"",*>YSl6\xf9""B\xb8\x96""O\x98""r\xf2\xd5\x8d\xe3""T\x99", 48); | 812 "*-\xc9"",*>YSl6\xf9""B\xb8\x96""O\x98""r\xf2\xd5\x8d\xe3""T\x99", 48); |
815 // goog-*-digest256 has no host-keys and contains only full-length | 813 // goog-*-digest256 has no host-keys and contains only full-length |
816 // hashes. | 814 // hashes. |
817 add_testdata[safe_browsing_util::kDownloadWhiteList] = std::string( | 815 add_testdata[safe_browsing_util::kDownloadWhiteList] = std::string( |
818 "a:42:32:32\n\xc8\xec\x9f\x9c\x9b\x9a"",\x82""G:F(\xe9\xad\x9c""b$\x8a" | 816 "a:42:32:32\n\xc8\xec\x9f\x9c\x9b\x9a"",\x82""G:F(\xe9\xad\x9c""b$\x8a" |
819 "\xba""%\x19\xae""c\x03\x87""~\xd1\xd3""bvC\xfd", 43); | 817 "\xba""%\x19\xae""c\x03\x87""~\xd1\xd3""bvC\xfd", 43); |
820 add_testdata[safe_browsing_util::kIPBlacklist] = std::string( | 818 add_testdata[safe_browsing_util::kIPBlacklist] = std::string( |
821 "a:12:32:32\n8\x99\x17\xda\xec""+i`\x1a\xb3""8pVh\n$\x01\xd1\x12" | 819 "a:12:32:32\n8\x99\x17\xda\xec""+i`\x1a\xb3""8pVh\n$\x01\xd1\x12" |
822 ":\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 43); | 820 ":\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 43); |
823 | 821 |
824 std::map<std::string, std::string> sub_testdata; | 822 std::map<std::string, std::string> sub_testdata; |
825 // goog-*-shavar lists have a host-key, add number followed by zero or more | 823 // goog-*-shavar lists have a host-key, add number followed by zero or more |
826 // prefixes. | 824 // prefixes. |
827 sub_testdata[safe_browsing_util::kMalwareList] = std::string( | 825 sub_testdata[safe_browsing_util::kMalwareList] = std::string( |
828 "s:122930:4:9\n\x85""!_\x13\x00\x00\x01\xf1\xa2", 22); | 826 "s:122930:4:9\n\x85""!_\x13\x00\x00\x01\xf1\xa2", 22); |
829 sub_testdata[safe_browsing_util::kPhishingList] = std::string( | 827 sub_testdata[safe_browsing_util::kPhishingList] = std::string( |
830 "s:150181:4:9\nr\x90""zt\x00\x00\x04\x9f""@", 22); | 828 "s:150181:4:9\nr\x90""zt\x00\x00\x04\x9f""@", 22); |
831 sub_testdata[safe_browsing_util::kBinUrlList] = std::string( | 829 sub_testdata[safe_browsing_util::kBinUrlList] = std::string( |
832 "s:3:4:13\nHOST\x01""####BBBB", 22); | 830 "s:3:4:13\nHOST\x01""####BBBB", 22); |
833 sub_testdata[safe_browsing_util::kSideEffectFreeWhitelist] = std::string( | 831 sub_testdata[safe_browsing_util::kSideEffectFreeWhitelist] = std::string( |
834 "s:4:4:9\nHOST\x00""####", 17); | 832 "s:4:4:9\nHOST\x00""####", 17); |
835 // goog-*-digestvar lists have no host-key data. | 833 // goog-*-digestvar lists have no host-key data. |
836 sub_testdata[safe_browsing_util::kBinHashList] = std::string( | |
837 "s:5:4:8\n####BBBB", 16); | |
838 sub_testdata[safe_browsing_util::kExtensionBlacklist] = std::string( | 834 sub_testdata[safe_browsing_util::kExtensionBlacklist] = std::string( |
839 "s:3:4:8\n\x00\x00\x00""%pgkc", 16); | 835 "s:3:4:8\n\x00\x00\x00""%pgkc", 16); |
840 // goog-*-sha256 lists have host-keys but they only contains | 836 // goog-*-sha256 lists have host-keys but they only contains |
841 // full-length entires. | 837 // full-length entires. |
842 sub_testdata[safe_browsing_util::kCsdWhiteList] = std::string( | 838 sub_testdata[safe_browsing_util::kCsdWhiteList] = std::string( |
843 "s:1:32:41\n\x1a""\"[\n\x01\x00\x00\x00\x15\x1""a\"[\n\xe9\x81""P\x11" | 839 "s:1:32:41\n\x1a""\"[\n\x01\x00\x00\x00\x15\x1""a\"[\n\xe9\x81""P\x11" |
844 "LR\xcb""3\x00""B\x90\xb3\x15""K\xf5\xdc\xd0""V\xc2""aI\x1e""-\xc8" | 840 "LR\xcb""3\x00""B\x90\xb3\x15""K\xf5\xdc\xd0""V\xc2""aI\x1e""-\xc8" |
845 "\xce"":\t\x01", 51); | 841 "\xce"":\t\x01", 51); |
846 // goog-*-digest256 has no host-keys and contains only full-length | 842 // goog-*-digest256 has no host-keys and contains only full-length |
847 // hashes. | 843 // hashes. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
884 chunk_data.data(), | 880 chunk_data.data(), |
885 static_cast<int>(chunk_data.length()), | 881 static_cast<int>(chunk_data.length()), |
886 &chunks)) | 882 &chunks)) |
887 << "Unable to parse sub chunk data for listname: " | 883 << "Unable to parse sub chunk data for listname: " |
888 << listname; | 884 << listname; |
889 ASSERT_EQ(chunks.size(), 1U); | 885 ASSERT_EQ(chunks.size(), 1U); |
890 EXPECT_FALSE(chunks[0].is_add); | 886 EXPECT_FALSE(chunks[0].is_add); |
891 } | 887 } |
892 } | 888 } |
893 } | 889 } |
OLD | NEW |