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