From d1987eef37cec0e54c4028891609a8a8dfdbea7d Mon Sep 17 00:00:00 2001 From: Viacheslav Babanin Date: Thu, 27 Jun 2024 17:46:43 -0700 Subject: [PATCH] Extend the regex pattern to allow top-level domains (TLDs) up to 63 characters to comply with RFC 1034 standard. (#1427) JAVA-5490 --- .../mongodb/internal/connection/DomainNameUtils.java | 2 +- .../internal/connection/DomainNameUtilsTest.java | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/driver-core/src/main/com/mongodb/internal/connection/DomainNameUtils.java b/driver-core/src/main/com/mongodb/internal/connection/DomainNameUtils.java index a1f0938e104..b64ea64ae24 100644 --- a/driver-core/src/main/com/mongodb/internal/connection/DomainNameUtils.java +++ b/driver-core/src/main/com/mongodb/internal/connection/DomainNameUtils.java @@ -22,7 +22,7 @@ */ public class DomainNameUtils { private static final Pattern DOMAIN_PATTERN = - Pattern.compile("^(?=.{1,255}$)((([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,6}|localhost))$"); + Pattern.compile("^(?=.{1,255}$)((([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,63}|localhost))$"); static boolean isDomainName(final String domainName) { return DOMAIN_PATTERN.matcher(domainName).matches(); diff --git a/driver-core/src/test/functional/com/mongodb/internal/connection/DomainNameUtilsTest.java b/driver-core/src/test/functional/com/mongodb/internal/connection/DomainNameUtilsTest.java index cc987cacf62..43abfa5b9f7 100644 --- a/driver-core/src/test/functional/com/mongodb/internal/connection/DomainNameUtilsTest.java +++ b/driver-core/src/test/functional/com/mongodb/internal/connection/DomainNameUtilsTest.java @@ -32,23 +32,25 @@ class DomainNameUtilsTest { "123numbers.com", "mixed-123domain.net", "longdomainnameabcdefghijk.com", + "i-0123456789abcdef.ec2.internal", + "ip-10-24-34-0.ec2.internal", "xn--frosch-6ya.com", "xn--emoji-grinning-3s0b.org", "xn--bcher-kva.ch", "localhost", - "abcdefghijklmnopqrstuvwxyz0123456789-abcdefghijklmnopqrstuvwxyz.com", + "abcdefghijklmnopqrstuvwxyz0123456789-abcdefghijklmnopqrstuvwxyz.com", //63 characters label name. + "a.abcdefghijklmnopqrstuvwxyzabcdefghjklabcdefghijklmnopqrstuvwxyz", //63 characters TLD. "xn--weihnachten-uzb.org", "sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain." + "com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain." + "com.domain.com.sub.domain.subb.com" //255 characters }) void shouldReturnTrueWithValidHostName(final String hostname) { - Assertions.assertTrue(isDomainName(hostname)); + Assertions.assertTrue(isDomainName(hostname), hostname + " is not a valid domain name"); } @ParameterizedTest @ValueSource(strings = { - "xn--tst-0qa.example", "xn--frosch-6ya.w23", "-special_chars_$$.net", "special_chars_$$.net", @@ -60,7 +62,8 @@ void shouldReturnTrueWithValidHostName(final String hostname) { "notlocalhost", "домен.com", //NON-ASCII "ẞẞ.com", //NON-ASCII - "abcdefghijklmnopqrstuvwxyz0123456789-abcdefghijklmnopqrstuvwxyzl.com", + "abcdefghijklmnopqrstuvwxyz0123456789-abcdefghijklmnopqrstuvwxyzl.com", //64 characters label name. + "a.abcdefghijklmnopqrstuvwxyzabcdefghjklabcdefghijklmnopqrstuvwxyza", //64 characters TLD. "this-domain-is-really-long-because-it-just-keeps-going-and-going-and-its-still-not-done-yet-because-theres-more.net", "verylongsubdomainnamethatisreallylongandmaycausetroubleforparsing.example", "sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain.com.sub.domain."