diff --git a/src/share/classes/sun/net/util/IPAddressUtil.java b/src/share/classes/sun/net/util/IPAddressUtil.java index 4dafa8a1d0b59ffbe1dcdc1224934bc44581bae3..6aa98c8f8d9ff84fb2e598c4a16283cc1d359acb 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 be5d8ab3ec856b4c75e220d793e477f02017a9a0..25022c0dfbf900e0c156a7d859f282ba20574217 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