OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/dns/dns_util.h" | 5 #include "net/dns/dns_util.h" |
6 | 6 |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 | 8 |
| 9 namespace { |
| 10 |
| 11 bool IsValidDNSDomainName(const char* name) { |
| 12 size_t length = strlen(name); |
| 13 for (size_t i = 0; i < length; ++i) { |
| 14 if (name[i] == '.') { |
| 15 if (i == 0 || name[i - 1] == '.') { |
| 16 return false; |
| 17 } |
| 18 continue; |
| 19 } |
| 20 |
| 21 if (!net::IsValidHostLabelCharacter(name[i], |
| 22 i == 0 || name[i - 1] == '.')) { |
| 23 return false; |
| 24 } |
| 25 } |
| 26 return true; |
| 27 } |
| 28 |
| 29 } // namespace |
| 30 |
9 namespace net { | 31 namespace net { |
10 | 32 |
11 class DNSUtilTest : public testing::Test { | 33 class DNSUtilTest : public testing::Test { |
12 }; | 34 }; |
13 | 35 |
14 // IncludeNUL converts a char* to a std::string and includes the terminating | 36 // IncludeNUL converts a char* to a std::string and includes the terminating |
15 // NUL in the result. | 37 // NUL in the result. |
16 static std::string IncludeNUL(const char* in) { | 38 static std::string IncludeNUL(const char* in) { |
17 return std::string(in, strlen(in) + 1); | 39 return std::string(in, strlen(in) + 1); |
18 } | 40 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 DNSDomainToString(IncludeNUL("\003foo\003bar\002uk"))); | 84 DNSDomainToString(IncludeNUL("\003foo\003bar\002uk"))); |
63 | 85 |
64 // It should cope with a lack of root label. | 86 // It should cope with a lack of root label. |
65 EXPECT_EQ("foo.bar", DNSDomainToString("\003foo\003bar")); | 87 EXPECT_EQ("foo.bar", DNSDomainToString("\003foo\003bar")); |
66 | 88 |
67 // Invalid inputs should return an empty string. | 89 // Invalid inputs should return an empty string. |
68 EXPECT_EQ("", DNSDomainToString(IncludeNUL("\x80"))); | 90 EXPECT_EQ("", DNSDomainToString(IncludeNUL("\x80"))); |
69 EXPECT_EQ("", DNSDomainToString("\x06")); | 91 EXPECT_EQ("", DNSDomainToString("\x06")); |
70 } | 92 } |
71 | 93 |
| 94 TEST_F(DNSUtilTest, IsValidDNSDomain) { |
| 95 const char* const bad_hostnames[] = { |
| 96 "%20%20noodles.blorg", "noo dles.blorg ", "noo dles.blorg. ", |
| 97 "^noodles.blorg", "noodles^.blorg", "noo&dles.blorg", |
| 98 "noodles.blorg`", "www.-noodles.blorg", |
| 99 }; |
| 100 |
| 101 // TODO(palmer): In the future, when we can remove support for invalid names, |
| 102 // change the calls to from |IsValidDNSDomainName| to |IsValidDNSDomain|, and |
| 103 // remove |IsValidDNSDomainName| (defined above). |
| 104 |
| 105 for (size_t i = 0; i < arraysize(bad_hostnames); ++i) { |
| 106 EXPECT_FALSE(IsValidDNSDomainName(bad_hostnames[i])); |
| 107 } |
| 108 |
| 109 const char* const good_hostnames[] = { |
| 110 "www.noodles.blorg", "1www.noodles.blorg", "www.2noodles.blorg", |
| 111 "www.n--oodles.blorg", "www.noodl_es.blorg", "www.no-_odles.blorg", |
| 112 "www_.noodles.blorg", "www.noodles.blorg.", "_privet._tcp.local", |
| 113 }; |
| 114 |
| 115 for (size_t i = 0; i < arraysize(good_hostnames); ++i) { |
| 116 EXPECT_TRUE(IsValidDNSDomainName(good_hostnames[i])); |
| 117 } |
| 118 } |
| 119 |
72 } // namespace net | 120 } // namespace net |
OLD | NEW |