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