diff --git a/src/java.base/share/classes/java/net/Inet6Address.java b/src/java.base/share/classes/java/net/Inet6Address.java index ca73a6e1cc1..06a74ca3adc 100644 --- a/src/java.base/share/classes/java/net/Inet6Address.java +++ b/src/java.base/share/classes/java/net/Inet6Address.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -554,6 +554,10 @@ class Inet6Address extends InetAddress { */ static InetAddress parseAddressString(String addressLiteral, boolean removeSqBrackets) throws UnknownHostException { + // Empty strings are not parseable + if (addressLiteral.isEmpty()) { + return null; + } // Remove trailing and leading square brackets if requested if (removeSqBrackets && addressLiteral.charAt(0) == '[' && addressLiteral.length() > 2 && diff --git a/src/java.base/share/classes/java/net/InetAddress.java b/src/java.base/share/classes/java/net/InetAddress.java index e94df5a9e0a..4bceebdcd0e 100644 --- a/src/java.base/share/classes/java/net/InetAddress.java +++ b/src/java.base/share/classes/java/net/InetAddress.java @@ -1618,6 +1618,9 @@ public sealed class InetAddress implements Serializable permits Inet4Address, In */ public static InetAddress ofLiteral(String ipAddressLiteral) { Objects.requireNonNull(ipAddressLiteral); + if (ipAddressLiteral.isEmpty()) { + throw IPAddressUtil.invalidIpAddressLiteral(ipAddressLiteral); + } InetAddress inetAddress; try { // First try to parse the input as an IPv4 address literal diff --git a/test/jdk/java/net/InetAddress/OfLiteralTest.java b/test/jdk/java/net/InetAddress/OfLiteralTest.java index 090523a9ee9..f9f6cdb500f 100644 --- a/test/jdk/java/net/InetAddress/OfLiteralTest.java +++ b/test/jdk/java/net/InetAddress/OfLiteralTest.java @@ -22,7 +22,7 @@ */ /* @test - * @bug 8272215 8315767 + * @bug 8272215 8315767 8332686 * @summary Test for ofLiteral, ofPosixLiteral APIs in InetAddress classes * @run junit/othervm -Djdk.net.hosts.file=nonExistingHostsFile.txt * OfLiteralTest @@ -373,7 +373,18 @@ public class OfLiteralTest { Arguments.of(InetAddressClass.INET4_ADDRESS_POSIX, ""), // empty Arguments.of(InetAddressClass.INET4_ADDRESS_POSIX, "0x1FFFFFFFF"), // 2^33 - 1 is too large Arguments.of(InetAddressClass.INET4_ADDRESS_POSIX, "0x100000000"), // 2^32 is too large - Arguments.of(InetAddressClass.INET4_ADDRESS_POSIX, "040000000000") + Arguments.of(InetAddressClass.INET4_ADDRESS_POSIX, "040000000000"), + + // Empty literals + Arguments.of(InetAddressClass.INET_ADDRESS, ""), + Arguments.of(InetAddressClass.INET4_ADDRESS, ""), + Arguments.of(InetAddressClass.INET6_ADDRESS, ""), + + // Blank literals + Arguments.of(InetAddressClass.INET_ADDRESS, " "), + Arguments.of(InetAddressClass.INET4_ADDRESS, " "), + Arguments.of(InetAddressClass.INET6_ADDRESS, " "), + Arguments.of(InetAddressClass.INET4_ADDRESS_POSIX, " ") ); // Construct arguments for a test case with IPv6-scoped address with scope-id // specified as a string with non-existing network interface name