Skip to content

Commit f059805

Browse files
authored
Extend the regex pattern to allow top-level domains (TLDs) up to 63 characters to comply with RFC 1034 standard. (#1427) (#1429)
This is a backport of #1427 JAVA-5490 (cherry picked from commit e4b8a83)
1 parent c320ac1 commit f059805

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

driver-core/src/main/com/mongodb/internal/connection/DomainNameUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
*/
2323
public class DomainNameUtils {
2424
private static final Pattern DOMAIN_PATTERN =
25-
Pattern.compile("^(?=.{1,255}$)((([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,6}|localhost))$");
25+
Pattern.compile("^(?=.{1,255}$)((([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,63}|localhost))$");
2626

2727
static boolean isDomainName(final String domainName) {
2828
return DOMAIN_PATTERN.matcher(domainName).matches();

driver-core/src/test/functional/com/mongodb/internal/connection/DomainNameUtilsTest.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,25 @@ class DomainNameUtilsTest {
3232
"123numbers.com",
3333
"mixed-123domain.net",
3434
"longdomainnameabcdefghijk.com",
35+
"i-0123456789abcdef.ec2.internal",
36+
"ip-10-24-34-0.ec2.internal",
3537
"xn--frosch-6ya.com",
3638
"xn--emoji-grinning-3s0b.org",
3739
"xn--bcher-kva.ch",
3840
"localhost",
39-
"abcdefghijklmnopqrstuvwxyz0123456789-abcdefghijklmnopqrstuvwxyz.com",
41+
"abcdefghijklmnopqrstuvwxyz0123456789-abcdefghijklmnopqrstuvwxyz.com", //63 characters label name.
42+
"a.abcdefghijklmnopqrstuvwxyzabcdefghjklabcdefghijklmnopqrstuvwxyz", //63 characters TLD.
4043
"xn--weihnachten-uzb.org",
4144
"sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain."
4245
+ "com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain."
4346
+ "com.domain.com.sub.domain.subb.com" //255 characters
4447
})
4548
void shouldReturnTrueWithValidHostName(final String hostname) {
46-
Assertions.assertTrue(isDomainName(hostname));
49+
Assertions.assertTrue(isDomainName(hostname), hostname + " is not a valid domain name");
4750
}
4851

4952
@ParameterizedTest
5053
@ValueSource(strings = {
51-
"xn--tst-0qa.example",
5254
"xn--frosch-6ya.w23",
5355
"-special_chars_$$.net",
5456
"special_chars_$$.net",
@@ -60,7 +62,8 @@ void shouldReturnTrueWithValidHostName(final String hostname) {
6062
"notlocalhost",
6163
"домен.com", //NON-ASCII
6264
"ẞẞ.com", //NON-ASCII
63-
"abcdefghijklmnopqrstuvwxyz0123456789-abcdefghijklmnopqrstuvwxyzl.com",
65+
"abcdefghijklmnopqrstuvwxyz0123456789-abcdefghijklmnopqrstuvwxyzl.com", //64 characters label name.
66+
"a.abcdefghijklmnopqrstuvwxyzabcdefghjklabcdefghijklmnopqrstuvwxyza", //64 characters TLD.
6467
"this-domain-is-really-long-because-it-just-keeps-going-and-going-and-its-still-not-done-yet-because-theres-more.net",
6568
"verylongsubdomainnamethatisreallylongandmaycausetroubleforparsing.example",
6669
"sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain."

0 commit comments

Comments
 (0)