# HG changeset patch # User jzavgren # Date 1372433889 -3600 # Node ID f76979ce4bc46a5aa88f105e3aae823ce609a05e # Parent 7a5c231327afe035f148c546b96564828337696b 8015799: HttpURLConnection.getHeaderFields() throws IllegalArgumentException Reviewed-by: chegar, dsamersoff, khazra diff -r 7a5c231327af -r f76979ce4bc4 jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java --- a/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Fri Jun 28 12:12:37 2013 +0100 +++ b/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Fri Jun 28 16:38:09 2013 +0100 @@ -2806,9 +2806,10 @@ if (SET_COOKIE.equalsIgnoreCase(name) || SET_COOKIE2.equalsIgnoreCase(name)) { + // Filtering only if there is a cookie handler. [Assumption: the // cookie handler will store/retrieve the HttpOnly cookies] - if (cookieHandler == null) + if (cookieHandler == null || value.length() == 0) return value; sun.misc.JavaNetHttpCookieAccess access = diff -r 7a5c231327af -r f76979ce4bc4 jdk/test/java/net/CookieHandler/EmptyCookieHeader.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/net/CookieHandler/EmptyCookieHeader.java Fri Jun 28 16:38:09 2013 +0100 @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2013, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8015799 + * @summary HttpURLConnection.getHeaderFields() throws IllegalArgumentException + */ + +import com.sun.net.httpserver.*; +import java.io.IOException; +import java.io.OutputStream; +import java.net.*; +import java.util.*; + +public class EmptyCookieHeader { + + public static void main(String[] args) throws Exception { + new EmptyCookieHeader().runTest(); + } + + public void runTest() throws Exception { + final CookieHandler oldHandler = CookieHandler.getDefault(); + CookieHandler.setDefault(new TestCookieHandler()); + HttpServer s = HttpServer.create(new InetSocketAddress(0), 0); + try { + startServer(s); + URL url = new URL("http://localhost:" + s.getAddress().getPort() + "/"); + HttpURLConnection c = (HttpURLConnection)url.openConnection(); + c.getHeaderFields(); + } finally { + CookieHandler.setDefault(oldHandler); + s.stop(0); + } + } + + static void startServer(HttpServer server) throws IOException { + server.createContext("/", new EmptyCookieHandler()); + server.start(); + } + + static class EmptyCookieHandler implements HttpHandler { + + @Override + public void handle(HttpExchange exchange) throws IOException { + String requestMethod = exchange.getRequestMethod(); + if (requestMethod.equalsIgnoreCase("GET")) { + Headers responseHeaders = exchange.getResponseHeaders(); + responseHeaders.set("Content-Type", "text/plain"); + responseHeaders.set("Date", "June 13th 2012"); + + // No domain value set + responseHeaders.set("Set-Cookie2", "name=value"); + responseHeaders.set("Set-Cookie2", ""); + exchange.sendResponseHeaders(200, 0); + try (OutputStream os = exchange.getResponseBody()) { + String str = "This is what the server sent!"; + os.write(str.getBytes()); + } + } + } + } + + class TestCookieHandler extends CookieHandler { + @Override + public Map> get(URI uri, + Map> respH) { + return new HashMap<>(); + } + + @Override + public void put(URI uri, Map> respH) { } + } +}