提交 3cec7b5c 编写于 作者: R robm

8087190: Regression in sun.net.util.IPAddressUtil.isIPv4LiteralAddress(String)

Reviewed-by: chegar
上级 2ad1db03
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -44,6 +44,7 @@ public class IPAddressUtil { ...@@ -44,6 +44,7 @@ public class IPAddressUtil {
long tmpValue = 0; long tmpValue = 0;
int currByte = 0; int currByte = 0;
boolean newOctet = true;
int len = src.length(); int len = src.length();
if (len == 0 || len > 15) { if (len == 0 || len > 15) {
...@@ -77,11 +78,12 @@ public class IPAddressUtil { ...@@ -77,11 +78,12 @@ public class IPAddressUtil {
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
char c = src.charAt(i); char c = src.charAt(i);
if (c == '.') { if (c == '.') {
if (tmpValue < 0 || tmpValue > 0xff || currByte == 3) { if (newOctet || tmpValue < 0 || tmpValue > 0xff || currByte == 3) {
return null; return null;
} }
res[currByte++] = (byte) (tmpValue & 0xff); res[currByte++] = (byte) (tmpValue & 0xff);
tmpValue = 0; tmpValue = 0;
newOctet = true;
} else { } else {
int digit = Character.digit(c, 10); int digit = Character.digit(c, 10);
if (digit < 0) { if (digit < 0) {
...@@ -89,9 +91,10 @@ public class IPAddressUtil { ...@@ -89,9 +91,10 @@ public class IPAddressUtil {
} }
tmpValue *= 10; tmpValue *= 10;
tmpValue += digit; tmpValue += digit;
newOctet = false;
} }
} }
if (tmpValue < 0 || tmpValue >= (1L << ((4 - currByte) * 8))) { if (newOctet || tmpValue < 0 || tmpValue >= (1L << ((4 - currByte) * 8))) {
return null; return null;
} }
switch (currByte) { switch (currByte) {
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 4749938 * @bug 4749938 8087190
* @summary Bug in the parsing IPv4 literal addresses * @summary Bug in the parsing IPv4 literal addresses
* @compile -XDignore.symbol.file=true DummyNameService.java DummyNameServiceDescriptor.java * @compile -XDignore.symbol.file=true DummyNameService.java DummyNameServiceDescriptor.java
* @run main/othervm -Dsun.net.spi.nameservice.provider.1=dummy,oracle textToNumericFormat * @run main/othervm -Dsun.net.spi.nameservice.provider.1=dummy,oracle textToNumericFormat
...@@ -62,7 +62,11 @@ public class textToNumericFormat { ...@@ -62,7 +62,11 @@ public class textToNumericFormat {
"2380.255.255.255", "2380.255.255.255",
"239.255.65536", "239.255.65536",
"239.16777216", "239.16777216",
"4294967296" }; "4294967296",
".1.1.1",
"1..1.1",
"1.1.1.",
"..." };
for (int i=0; i<goodAddrs.length; i++) { for (int i=0; i<goodAddrs.length; i++) {
try { try {
......
...@@ -21,6 +21,12 @@ ...@@ -21,6 +21,12 @@
* questions. * questions.
*/ */
/*
* @test
* @bug 8087190
* @summary Exercise the sun.net.util.IPAddressUtil class
*/
import sun.net.util.*; import sun.net.util.*;
/* /*
...@@ -39,6 +45,10 @@ public class IPAddressUtilTest { ...@@ -39,6 +45,10 @@ public class IPAddressUtilTest {
{"238.255.2550.255", bad}, {"238.255.2550.255", bad},
{"238.2550.255.255", bad}, {"238.2550.255.255", bad},
{"2380.255.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", good},
{"10::10.1", bad}, {"10::10.1", bad},
{"10::10.1.2", bad}, {"10::10.1.2", bad},
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册