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 02:45:08 UTC

[cxf] branch master updated: 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 master
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/master by this push:
     new 6d54140  CXF-8163: javax.ws.rs.core.Response#getCookies() fails when cookie has no value (#605)
6d54140 is described below

commit 6d5414076962fdd153ceb5d3e04292c3453fc096
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)
---
 .../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 df19f3e..fc323db 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
@@ -67,8 +67,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);
             }
@@ -164,7 +170,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 37fd341..918896c 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
@@ -52,6 +52,12 @@ public class NewCookieHeaderProviderTest {
                    && "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 1ee0881..4472794 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
@@ -279,6 +279,21 @@ public class ResponseImplTest {
     }
 
     @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<>();