You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2016/04/07 11:38:01 UTC
cxf git commit: [CXF-6729] Not quoting Path with forward slash
characters
Repository: cxf
Updated Branches:
refs/heads/master 3a461f1db -> 7cccdcf53
[CXF-6729] Not quoting Path with forward slash characters
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/7cccdcf5
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/7cccdcf5
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/7cccdcf5
Branch: refs/heads/master
Commit: 7cccdcf53220a8611fe6475d15acd6bc968349f3
Parents: 3a461f1
Author: Sergey Beryozkin <sb...@gmail.com>
Authored: Thu Apr 7 10:37:42 2016 +0100
Committer: Sergey Beryozkin <sb...@gmail.com>
Committed: Thu Apr 7 10:37:42 2016 +0100
----------------------------------------------------------------------
.../cxf/jaxrs/impl/CookieHeaderProvider.java | 6 +--
.../cxf/jaxrs/impl/NewCookieHeaderProvider.java | 40 +++++++++++---------
.../jaxrs/impl/NewCookieHeaderProviderTest.java | 6 +++
3 files changed, 32 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/7cccdcf5/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/CookieHeaderProvider.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/CookieHeaderProvider.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/CookieHeaderProvider.java
index f0a3b3e..89df061 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/CookieHeaderProvider.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/CookieHeaderProvider.java
@@ -75,12 +75,12 @@ public class CookieHeaderProvider implements HeaderDelegate<Cookie> {
if (c.getVersion() != 0) {
sb.append(VERSION).append('=').append(c.getVersion()).append(';');
}
- sb.append(c.getName()).append('=').append(NewCookieHeaderProvider.maybeQuote(c.getValue()));
+ sb.append(c.getName()).append('=').append(NewCookieHeaderProvider.maybeQuoteAll(c.getValue()));
if (c.getPath() != null) {
- sb.append(';').append(PATH).append('=').append(NewCookieHeaderProvider.maybeQuote(c.getPath()));
+ sb.append(';').append(PATH).append('=').append(NewCookieHeaderProvider.maybeQuotePath(c.getPath()));
}
if (c.getDomain() != null) {
- sb.append(';').append(DOMAIN).append('=').append(NewCookieHeaderProvider.maybeQuote(c.getDomain()));
+ sb.append(';').append(DOMAIN).append('=').append(NewCookieHeaderProvider.maybeQuoteAll(c.getDomain()));
}
return sb.toString();
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/7cccdcf5/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java
----------------------------------------------------------------------
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 4bcfd5e..601edb8 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
@@ -39,7 +39,9 @@ public class NewCookieHeaderProvider implements HeaderDelegate<NewCookie> {
private static final String HTTP_ONLY = "HttpOnly";
/** from RFC 2068, token special case characters */
- private static final String TSPECIALS = "\"()<>@,;:\\/[]?={} \t";
+
+ private static final String TSPECIALS_PATH = "\"()<>@,;:\\[]?={} \t";
+ private static final String TSPECIALS_ALL = TSPECIALS_PATH + "/";
private static final String DOUBLE_QUOTE = "\"";
public NewCookie fromString(String c) {
@@ -108,18 +110,18 @@ public class NewCookieHeaderProvider implements HeaderDelegate<NewCookie> {
}
StringBuilder sb = new StringBuilder();
- sb.append(value.getName()).append('=').append(maybeQuote(value.getValue()));
+ sb.append(value.getName()).append('=').append(maybeQuoteAll(value.getValue()));
if (value.getComment() != null) {
- sb.append(';').append(COMMENT).append('=').append(maybeQuote(value.getComment()));
+ sb.append(';').append(COMMENT).append('=').append(maybeQuoteAll(value.getComment()));
}
if (value.getDomain() != null) {
- sb.append(';').append(DOMAIN).append('=').append(maybeQuote(value.getDomain()));
+ sb.append(';').append(DOMAIN).append('=').append(maybeQuoteAll(value.getDomain()));
}
if (value.getMaxAge() != -1) {
sb.append(';').append(MAX_AGE).append('=').append(value.getMaxAge());
}
if (value.getPath() != null) {
- sb.append(';').append(PATH).append('=').append(maybeQuote(value.getPath()));
+ sb.append(';').append(PATH).append('=').append(maybeQuotePath(value.getPath()));
}
if (value.getExpiry() != null) {
sb.append(';').append(EXPIRES).append('=').append(HttpUtils.toHttpDate(value.getExpiry()));
@@ -142,20 +144,24 @@ public class NewCookieHeaderProvider implements HeaderDelegate<NewCookie> {
* @param value
* @return String
*/
- static String maybeQuote(String value) {
-
- StringBuilder buff = new StringBuilder();
- // handle a null value as well as an empty one, attr=
- if (null == value || 0 == value.length()) {
- buff.append("");
- } else if (needsQuote(value)) {
+ static String maybeQuote(String tSpecials, String value) {
+ if (needsQuote(tSpecials, value)) {
+ StringBuilder buff = new StringBuilder();
buff.append('"');
- buff.append(value);
+ if (value != null) {
+ buff.append(value);
+ }
buff.append('"');
+ return buff.toString();
} else {
- buff.append(value);
+ return value == null ? "" : value;
}
- return buff.toString();
+ }
+ static String maybeQuoteAll(String value) {
+ return maybeQuote(TSPECIALS_ALL, value);
+ }
+ static String maybeQuotePath(String value) {
+ return maybeQuote(TSPECIALS_PATH, value);
}
/**
@@ -165,7 +171,7 @@ public class NewCookieHeaderProvider implements HeaderDelegate<NewCookie> {
* @param value
* @return boolean
*/
- static boolean needsQuote(String value) {
+ static boolean needsQuote(String tSpecials, String value) {
if (null == value) {
return true;
}
@@ -180,7 +186,7 @@ public class NewCookieHeaderProvider implements HeaderDelegate<NewCookie> {
for (int i = 0; i < len; i++) {
char c = value.charAt(i);
- if (c < 0x20 || c >= 0x7f || TSPECIALS.indexOf(c) != -1) {
+ if (c < 0x20 || c >= 0x7f || tSpecials.indexOf(c) != -1) {
return true;
}
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/7cccdcf5/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java
----------------------------------------------------------------------
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 f04aac6..f34653d 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
@@ -136,5 +136,11 @@ public class NewCookieHeaderProviderTest extends Assert {
assertEquals("foo=\"bar (space)<>[]\";Comment=\"comment@comment:,\";Domain=domain.com;Max-Age=2;"
+ "Path=\"/path?path\";Secure;Version=1", c.toString());
}
+ @Test
+ public void testToStringWithPathSlalshOnly() {
+ NewCookie c = new NewCookie("foo", "bar (space)<>[]", "/path", "domain.com", "comment@comment:,", 2, true);
+ assertEquals("foo=\"bar (space)<>[]\";Comment=\"comment@comment:,\";Domain=domain.com;Max-Age=2;"
+ + "Path=/path;Secure;Version=1", c.toString());
+ }
}