OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/base/ssl_false_start_blacklist.h" | 5 #include "net/base/ssl_false_start_blacklist.h" |
6 | 6 |
7 namespace net { | 7 namespace net { |
8 | 8 |
9 // static | 9 // static |
10 bool SSLFalseStartBlacklist::IsMember(const std::string& host) { | 10 bool SSLFalseStartBlacklist::IsMember(const char* host) { |
11 const std::string last_two_components(LastTwoComponents(host)); | 11 const char* last_two_labels = LastTwoLabels(host); |
12 if (last_two_components.empty()) | 12 if (!last_two_labels) |
13 return false; | 13 return false; |
| 14 const unsigned bucket = Hash(last_two_labels) & (kBuckets - 1); |
| 15 const uint32 start = kHashTable[bucket]; |
| 16 const uint32 end = kHashTable[bucket + 1]; |
| 17 const size_t len = strlen(host); |
14 | 18 |
15 const size_t bucket = Hash(last_two_components) & (kBuckets - 1); | 19 for (size_t i = start; i < end;) { |
16 for (size_t i = kHashTable[bucket]; i < kHashTable[bucket + 1]; ) { | |
17 const size_t blacklist_entry_len = static_cast<uint8>(kHashData[i]); | 20 const size_t blacklist_entry_len = static_cast<uint8>(kHashData[i]); |
18 if (host.length() >= blacklist_entry_len && | 21 if (len >= blacklist_entry_len && |
19 !host.compare(host.length() - blacklist_entry_len, blacklist_entry_len, | 22 memcmp(&host[len - blacklist_entry_len], &kHashData[i + 1], |
20 &kHashData[i + 1], blacklist_entry_len) && | 23 blacklist_entry_len) == 0 && |
21 (host.length() == blacklist_entry_len || | 24 (len == blacklist_entry_len || |
22 host[host.length() - blacklist_entry_len - 1] == '.')) { | 25 host[len - blacklist_entry_len - 1] == '.')) { |
23 return true; | 26 return true; |
24 } | 27 } |
25 i += blacklist_entry_len + 1; | 28 i += blacklist_entry_len + 1; |
26 } | 29 } |
27 | 30 |
28 return false; | 31 return false; |
29 } | 32 } |
30 | 33 |
31 } // namespace net | 34 } // namespace net |
OLD | NEW |