Author: jfrederic.clere(a)jboss.com
Date: 2007-11-08 08:47:45 -0500 (Thu, 08 Nov 2007)
New Revision: 340
Modified:
trunk/java/org/apache/tomcat/util/http/Cookies.java
trunk/java/org/apache/tomcat/util/http/ServerCookie.java
Log:
Arrange the cookies test (failed TCK).
Modified: trunk/java/org/apache/tomcat/util/http/Cookies.java
===================================================================
--- trunk/java/org/apache/tomcat/util/http/Cookies.java 2007-11-06 17:58:14 UTC (rev 339)
+++ trunk/java/org/apache/tomcat/util/http/Cookies.java 2007-11-08 13:47:45 UTC (rev 340)
@@ -487,7 +487,7 @@
if (equals( "Version", bytes, nameStart, nameEnd) &&
sc == null) {
// Set version
- if( bytes[valueStart] =='1' && valueEnd ==
valueStart) {
+ if( bytes[valueStart] =='1' && valueEnd ==
(valueStart+1)) {
version=1;
} else {
// unknown version (Versioning is not very strict)
Modified: trunk/java/org/apache/tomcat/util/http/ServerCookie.java
===================================================================
--- trunk/java/org/apache/tomcat/util/http/ServerCookie.java 2007-11-06 17:58:14 UTC (rev
339)
+++ trunk/java/org/apache/tomcat/util/http/ServerCookie.java 2007-11-08 13:47:45 UTC (rev
340)
@@ -305,11 +305,28 @@
if (isToken(value)) {
buf.append(value);
} else {
- buf.append('"');
- buf.append(escapeDoubleQuotes(value));
- buf.append('"');
+ if (alreadyQuoted(value))
+ buf.append(value);
+ else {
+ buf.append('"');
+ buf.append(escapeDoubleQuotes(value));
+ buf.append('"');
+ }
}
}
+ public static boolean alreadyQuoted (String value) {
+ if (value.startsWith("\"") &&
value.endsWith("\"")) {
+ int len = value.length();
+ for (int i = 1; i < len-1; i++) {
+ char c = value.charAt(i);
+ // Make sure there aren't unescaped controls in value.
+ if (c < 0x20 || c >= 0x7f)
+ return false; // We will escape the " and controls.
+ }
+ return true;
+ }
+ return false;
+ }
/**
* Quotes values using rules that vary depending on Cookie version.
@@ -323,9 +340,13 @@
if (version == 0 && isToken(value) || version == 1 &&
isToken2(value)) {
buf.append(value);
} else {
- buf.append('"');
- buf.append(escapeDoubleQuotes(value));
- buf.append('"');
+ if (alreadyQuoted(value))
+ buf.append(value);
+ else {
+ buf.append('"');
+ buf.append(escapeDoubleQuotes(value));
+ buf.append('"');
+ }
}
}
Show replies by date