This is an automated email from the ASF dual-hosted git repository. reta pushed a commit to branch 3.2.x-fixes in repository https://gitbox.apache.org/repos/asf/cxf.git
commit ddf492153acbbd2d04fbb3abb942b31e5e81877a Author: Andriy Redko <[email protected]> AuthorDate: Tue Nov 26 21:44:55 2019 -0500 CXF-8163: javax.ws.rs.core.Response#getCookies() fails when cookie has no value (#605) (cherry picked from commit 6d5414076962fdd153ceb5d3e04292c3453fc096) (cherry picked from commit aacfb57762fd92c835fc543a6d30570f0e2edd95) --- .../apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java | 12 +++++++++--- .../cxf/jaxrs/impl/NewCookieHeaderProviderTest.java | 6 ++++++ .../java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java index db1aeb2..d3e8bc6 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java @@ -68,8 +68,14 @@ public class NewCookieHeaderProvider implements HeaderDelegate<NewCookie> { int sepIndex = theToken.indexOf('='); String paramName = sepIndex != -1 ? theToken.substring(0, sepIndex) : theToken; - String paramValue = sepIndex == -1 || sepIndex == theToken.length() - 1 - ? null : theToken.substring(sepIndex + 1); + String paramValue = null; + + if (sepIndex == theToken.length() - 1) { + paramValue = ""; + } else if (sepIndex != -1) { + paramValue = theToken.substring(sepIndex + 1); + } + if (paramValue != null) { paramValue = stripQuotes(paramValue); } @@ -165,7 +171,7 @@ public class NewCookieHeaderProvider implements HeaderDelegate<NewCookie> { } /** - * Return true iff the string contains special characters that need to be + * Return true if the string contains special characters that need to be * quoted. * * @param value diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java index c0a32bb..f97829b 100644 --- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java +++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java @@ -49,6 +49,12 @@ public class NewCookieHeaderProviderTest extends Assert { && "foo".equals(c.getName())); } + @Test + public void testNoValue() { + NewCookie c = NewCookie.valueOf("foo="); + assertTrue("".equals(c.getValue()) + && "foo".equals(c.getName())); + } @Test public void testFromComplexString() { diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java index 443952b..687ac23 100644 --- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java +++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java @@ -276,6 +276,21 @@ public class ResponseImplTest extends Assert { } @Test + public void testGetCookiesWithEmptyValues() { + ResponseImpl ri = new ResponseImpl(200); + MetadataMap<String, Object> meta = new MetadataMap<>(); + meta.add("Set-Cookie", NewCookie.valueOf("a=")); + meta.add("Set-Cookie", NewCookie.valueOf("c=\"\"")); + ri.addMetadata(meta); + Map<String, NewCookie> cookies = ri.getCookies(); + assertEquals(2, cookies.size()); + assertEquals("a=\"\";Version=1", cookies.get("a").toString()); + assertEquals("c=\"\";Version=1", cookies.get("c").toString()); + assertEquals("", cookies.get("a").getValue()); + assertEquals("", cookies.get("c").getValue()); + } + + @Test public void testGetCookies() { ResponseImpl ri = new ResponseImpl(200); MetadataMap<String, Object> meta = new MetadataMap<String, Object>();
