8087190: Regression in sun.net.util.IPAddressUtil.isIPv4LiteralAddress(String)
authorrobm
Tue, 25 Aug 2015 14:07:08 +0100
changeset 32271 d6cb1602f271
parent 32270 6fe05edf9177
child 32272 107a28901a7b
8087190: Regression in sun.net.util.IPAddressUtil.isIPv4LiteralAddress(String) Reviewed-by: chegar
jdk/src/java.base/share/classes/sun/net/util/IPAddressUtil.java
jdk/test/java/net/Inet4Address/textToNumericFormat.java
jdk/test/sun/net/util/IPAddressUtilTest.java
--- a/jdk/src/java.base/share/classes/sun/net/util/IPAddressUtil.java	Mon Aug 24 19:10:51 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/net/util/IPAddressUtil.java	Tue Aug 25 14:07:08 2015 +0100
@@ -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 @@
 
         long tmpValue = 0;
         int currByte = 0;
+        boolean newOctet = true;
 
         int len = src.length();
         if (len == 0 || len > 15) {
@@ -77,11 +78,12 @@
         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 @@
                 }
                 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) {
--- a/jdk/test/java/net/Inet4Address/textToNumericFormat.java	Mon Aug 24 19:10:51 2015 -0700
+++ b/jdk/test/java/net/Inet4Address/textToNumericFormat.java	Tue Aug 25 14:07:08 2015 +0100
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 4749938
+ * @bug 4749938 8087190
  * @summary Bug in the parsing IPv4 literal addresses
  * @modules java.base/sun.net.spi.nameservice
  * @compile -XDignore.symbol.file=true DummyNameService.java DummyNameServiceDescriptor.java
@@ -63,7 +63,11 @@
                            "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<goodAddrs.length; i++) {
             try {
--- a/jdk/test/sun/net/util/IPAddressUtilTest.java	Mon Aug 24 19:10:51 2015 -0700
+++ b/jdk/test/sun/net/util/IPAddressUtilTest.java	Tue Aug 25 14:07:08 2015 +0100
@@ -21,6 +21,12 @@
  * questions.
  */
 
+/*
+ * @test
+ * @bug 8087190
+ * @summary Exercise the sun.net.util.IPAddressUtil class
+ */
+
 import sun.net.util.*;
 
 /*
@@ -39,6 +45,10 @@
         {"238.255.2550.255", bad},
         {"238.2550.255.255", bad},
         {"2380.255.255.255", bad},
+        {".1.1.1", bad},
+        {"1..1.1", bad},
+        {"1.1.1.", bad},
+        {"...", bad},
         {"10::10", good},
         {"10::10.1", bad},
         {"10::10.1.2", bad},