diff --git a/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java b/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java index 136ab85b3ed..480553e9a62 100644 --- a/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java +++ b/src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java @@ -2041,7 +2041,11 @@ public class HttpURLConnection extends java.net.HttpURLConnection { if (statusLine == null || statusLine.isBlank()) { return invalidStatusLine; } - final StringTokenizer st = new StringTokenizer(statusLine); + // + // status-line = HTTP-version SP status-code SP [ reason-phrase ] + // SP = space character + // + final StringTokenizer st = new StringTokenizer(statusLine, " "); if (!st.hasMoreTokens()) { return invalidStatusLine; } @@ -2049,7 +2053,7 @@ public class HttpURLConnection extends java.net.HttpURLConnection { if (!st.hasMoreTokens()) { return invalidStatusLine; } - final String v = st.nextToken().trim(); // response code + final String v = st.nextToken().trim(); // status code try { return Integer.parseInt(v); } catch (NumberFormatException nfe) { diff --git a/test/jdk/java/net/HttpURLConnection/ProxyBadStatusLine.java b/test/jdk/java/net/HttpURLConnection/ProxyBadStatusLine.java index da63a3b904c..be881030715 100644 --- a/test/jdk/java/net/HttpURLConnection/ProxyBadStatusLine.java +++ b/test/jdk/java/net/HttpURLConnection/ProxyBadStatusLine.java @@ -66,7 +66,10 @@ class ProxyBadStatusLine { Arguments.of("HTTP/1.1\n", "Unable to tunnel through proxy"), Arguments.of("HTTP/1.1 301 ", "Unable to tunnel through proxy"), Arguments.of("HTTP/1.1 404 ", "Unable to tunnel through proxy"), - Arguments.of("HTTP/1.1 503 ", "Unable to tunnel through proxy") + Arguments.of("HTTP/1.1 503 ", "Unable to tunnel through proxy"), + Arguments.of("HTTP/1.1\n200 ", "Unable to tunnel through proxy"), + Arguments.of("HTTP/1.1\r200 ", "Unable to tunnel through proxy"), + Arguments.of("HTTP/1.1\f200 ", "Unable to tunnel through proxy") ); }