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>();