From 1b8421c7fe8ff7d2c1b2f36ebd33ab6e6dd22973 Mon Sep 17 00:00:00 2001 From: Michael Bell Date: Tue, 2 Oct 2018 03:18:45 -0700 Subject: [PATCH] Fix MockCookie parsing when attribute is omitted Issue: SPR-17321, #1974 --- .../springframework/mock/web/MockCookie.java | 2 +- .../mock/web/MockHttpServletRequestTests.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java b/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java index 7bcd893cc8..d9b7e8c5f1 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java @@ -80,7 +80,7 @@ public class MockCookie extends Cookie { String name = cookieParts[0]; String[] valueAndDirectives = cookieParts[1].split("\\s*;\\s*", 2); String value = valueAndDirectives[0]; - String[] directives = valueAndDirectives[1].split("\\s*;\\s*"); + String[] directives = valueAndDirectives.length > 1 ? valueAndDirectives[1].split("\\s*;\\s*") : new String[0]; MockCookie cookie = new MockCookie(name, value); for (String directive : directives) { diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java index ac493936c4..27451ab1d6 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java @@ -544,6 +544,29 @@ public class MockHttpServletRequestTests { request.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE); } + @Test + public void testCookieParsing() { + MockCookie m = MockCookie.parse("foo=bar"); + testCookie("foo", "bar", m); + m = MockCookie.parse("foo=bar;"); + assertFalse(m.isHttpOnly()); + assertFalse(m.getSecure()); + testCookie("foo", "bar", m); + m = MockCookie.parse("foo=bar; HttpOnly"); + testCookie("foo", "bar", m); + assertTrue(m.isHttpOnly()); + assertFalse(m.getSecure()); + m = MockCookie.parse("foo=bar; Secure"); + testCookie("foo", "bar", m); + assertTrue(m.getSecure()); + assertFalse(m.isHttpOnly()); + } + + private void testCookie(String name, String value, MockCookie mockCookie) { + assertEquals(name, mockCookie.getName()); + assertEquals(value, mockCookie.getValue()); + } + private void assertEqualEnumerations(Enumeration enum1, Enumeration enum2) { assertNotNull(enum1);