Author: markt Date: Wed Jul 18 19:33:46 2007 New Revision: 557463 URL: http://svn.apache.org/viewvc?view=rev&rev=557463 Log: Escape the " in the cookie value. Port of fix from TC6
Modified: tomcat/connectors/trunk/util/java/org/apache/tomcat/util/http/ServerCookie.java Modified: tomcat/connectors/trunk/util/java/org/apache/tomcat/util/http/ServerCookie.java URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/util/java/org/apache/tomcat/util/http/ServerCookie.java?view=diff&rev=557463&r1=557462&r2=557463 ============================================================================== --- tomcat/connectors/trunk/util/java/org/apache/tomcat/util/http/ServerCookie.java (original) +++ tomcat/connectors/trunk/util/java/org/apache/tomcat/util/http/ServerCookie.java Wed Jul 18 19:33:46 2007 @@ -130,6 +130,7 @@ // // private static final String tspecials = "()<>@,;:\\\"/[]?={} \t"; private static final String tspecials = ",; "; + private static final String tspecials2 = ",; \""; /* * Tests a string and returns true if the string counts as a @@ -154,6 +155,20 @@ return true; } + public static boolean isToken2(String value) { + if( value==null) return true; + int len = value.length(); + + for (int i = 0; i < len; i++) { + char c = value.charAt(i); + + if (c < 0x20 || c >= 0x7f || tspecials2.indexOf(c) != -1) + return false; + } + return true; + } + + public static boolean checkName( String name ) { if (!isToken(name) || name.equalsIgnoreCase("Comment") // rfc2019 @@ -214,7 +229,7 @@ // this part is the same for all cookies buf.append( name ); buf.append("="); - maybeQuote(version, buf, value); + maybeQuote2(version, buf, value); // XXX Netscape cookie: "; " // add version 1 specific information @@ -285,6 +300,20 @@ } } + + public static void maybeQuote2 (int version, StringBuffer buf, + String value) { + // special case - a \n or \r shouldn't happen in any case + if (isToken2(value)) { + buf.append(value); + } else { + buf.append('"'); + buf.append(escapeDoubleQuotes(value)); + buf.append('"'); + } + } + + // log static final int dbg=1; public static void log(String s ) { @@ -307,12 +336,14 @@ } StringBuffer b = new StringBuffer(); + char p = s.charAt(0); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); - if (c == '"') + if (c == '"' && p != '\\') b.append('\\').append('"'); else b.append(c); + p = c; } return b.toString(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]