| 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 |