You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2019/11/27 03:26:26 UTC
[cxf] 01/02: CXF-8163: javax.ws.rs.core.Response#getCookies() fails
when cookie has no value (#605)
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 <dr...@gmail.com>
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>();