Accept IPv4-embedded IPv6 addresses in UrlValidator (#405). Sort members.
diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 5d50df7..1262c5b 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml
@@ -87,6 +87,7 @@ <action type="fix" dev="ggregory" due-to="sahvx655-wq, Gary Gregory">Compare Exact value in BigDecimalValidator min/max range checks (#401).</action> <action type="fix" dev="ggregory" due-to="Gary Gregory, sahvx655-wq">Compare exact values in BigInteger and BigDecimal Number range checks (#404).</action> <action type="fix" dev="ggregory" due-to="sahvx655-wq, Gary Gregory">Reject non-ASCII hex digits in isValidInet6Address (#403).</action> + <action type="fix" dev="ggregory" due-to="sahvx655-wq, Gary Gregory">Accept IPv4-embedded IPv6 addresses in UrlValidator (#405).</action> <!-- ADD --> <action type="add" dev="ggregory" due-to="Gary Gregory">Add and use CheckDigitException.CheckDigitException(String, Object...) (#389).</action> <action type="add" dev="ggregory" due-to="Gary Gregory">Add and use ValidatorException.ValidatorException(Throwable). Call sites that previously called new ValidatorException(Throwable#getMessage()) now preserve that exception (#390).</action>
diff --git a/src/test/java/org/apache/commons/validator/routines/UrlValidatorTest.java b/src/test/java/org/apache/commons/validator/routines/UrlValidatorTest.java index b229e51..63d5f16 100644 --- a/src/test/java/org/apache/commons/validator/routines/UrlValidatorTest.java +++ b/src/test/java/org/apache/commons/validator/routines/UrlValidatorTest.java
@@ -161,6 +161,18 @@ assertTrue(urlValidator.isValid("http://apache.org/a/b/c#frag")); } + @Test + void testIpv6EmbeddedIpv4() { + final UrlValidator urlValidator = new UrlValidator(); + // ::FFFF: in upper case already worked (testValidator452); the lower-case mapped form + // and the other IPv4-embedded notations must validate the same way. + assertTrue(urlValidator.isValid("http://[::ffff:129.144.52.38]:80/index.html")); + assertTrue(urlValidator.isValid("http://[::1.2.3.4]/")); + assertTrue(urlValidator.isValid("http://[2001:db8::1.2.3.4]/")); + // an embedded IPv4 part with an out-of-range octet is still rejected + assertFalse(urlValidator.isValid("http://[::ffff:129.144.52.999]/")); + } + @ParameterizedTest // @formatter:off @ValueSource(strings = { @@ -669,18 +681,6 @@ } @Test - void testIpv6EmbeddedIpv4() { - final UrlValidator urlValidator = new UrlValidator(); - // ::FFFF: in upper case already worked (testValidator452); the lower-case mapped form - // and the other IPv4-embedded notations must validate the same way. - assertTrue(urlValidator.isValid("http://[::ffff:129.144.52.38]:80/index.html")); - assertTrue(urlValidator.isValid("http://[::1.2.3.4]/")); - assertTrue(urlValidator.isValid("http://[2001:db8::1.2.3.4]/")); - // an embedded IPv4 part with an out-of-range octet is still rejected - assertFalse(urlValidator.isValid("http://[::ffff:129.144.52.999]/")); - } - - @Test void testValidator464() { final String[] schemes = { "file" }; final UrlValidator urlValidator = new UrlValidator(schemes);