From 3cec7b5cbe49ad4384f7792ed3d148d6b556d3ec Mon Sep 17 00:00:00 2001 From: robm Date: Tue, 25 Aug 2015 14:07:08 +0100 Subject: [PATCH] 8087190: Regression in sun.net.util.IPAddressUtil.isIPv4LiteralAddress(String) Reviewed-by: chegar --- src/share/classes/sun/net/util/IPAddressUtil.java | 9 ++++++--- test/java/net/Inet4Address/textToNumericFormat.java | 8 ++++++-- test/sun/net/util/IPAddressUtilTest.java | 10 ++++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/share/classes/sun/net/util/IPAddressUtil.java b/src/share/classes/sun/net/util/IPAddressUtil.java index 4dafa8a1d..6aa98c8f8 100644 --- a/src/share/classes/sun/net/util/IPAddressUtil.java +++ b/src/share/classes/sun/net/util/IPAddressUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2015, 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 @@ -44,6 +44,7 @@ public class IPAddressUtil { long tmpValue = 0; int currByte = 0; + boolean newOctet = true; int len = src.length(); if (len == 0 || len > 15) { @@ -77,11 +78,12 @@ public class IPAddressUtil { for (int i = 0; i < len; i++) { char c = src.charAt(i); if (c == '.') { - if (tmpValue < 0 || tmpValue > 0xff || currByte == 3) { + if (newOctet || tmpValue < 0 || tmpValue > 0xff || currByte == 3) { return null; } res[currByte++] = (byte) (tmpValue & 0xff); tmpValue = 0; + newOctet = true; } else { int digit = Character.digit(c, 10); if (digit < 0) { @@ -89,9 +91,10 @@ public class IPAddressUtil { } tmpValue *= 10; tmpValue += digit; + newOctet = false; } } - if (tmpValue < 0 || tmpValue >= (1L << ((4 - currByte) * 8))) { + if (newOctet || tmpValue < 0 || tmpValue >= (1L << ((4 - currByte) * 8))) { return null; } switch (currByte) { diff --git a/test/java/net/Inet4Address/textToNumericFormat.java b/test/java/net/Inet4Address/textToNumericFormat.java index be5d8ab3e..25022c0df 100644 --- a/test/java/net/Inet4Address/textToNumericFormat.java +++ b/test/java/net/Inet4Address/textToNumericFormat.java @@ -23,7 +23,7 @@ /* * @test - * @bug 4749938 + * @bug 4749938 8087190 * @summary Bug in the parsing IPv4 literal addresses * @compile -XDignore.symbol.file=true DummyNameService.java DummyNameServiceDescriptor.java * @run main/othervm -Dsun.net.spi.nameservice.provider.1=dummy,oracle textToNumericFormat @@ -62,7 +62,11 @@ public class textToNumericFormat { "2380.255.255.255", "239.255.65536", "239.16777216", - "4294967296" }; + "4294967296", + ".1.1.1", + "1..1.1", + "1.1.1.", + "..." }; for (int i=0; i