Author: markt Date: Fri Aug 3 17:15:53 2007 New Revision: 562625 URL: http://svn.apache.org/viewvc?view=rev&rev=562625 Log: Fix bug 42944. + should only decoded to space in query strings. All current uses of URLDecide() are not for query strings.
Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/util/RequestUtil.java tomcat/container/tc5.5.x/webapps/docs/changelog.xml Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/util/RequestUtil.java URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/util/RequestUtil.java?view=diff&rev=562625&r1=562624&r2=562625 ============================================================================== --- tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/util/RequestUtil.java (original) +++ tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/util/RequestUtil.java Fri Aug 3 17:15:53 2007 @@ -74,7 +74,6 @@ buf.append("\""); } - long age = cookie.getMaxAge(); if (cookie.getMaxAge() >= 0) { buf.append("; Max-Age=\""); buf.append(cookie.getMaxAge()); @@ -308,7 +307,7 @@ * Decode and return the specified URL-encoded String. * When the byte array is converted to a string, the system default * character encoding is used... This may be different than some other - * servers. + * servers. It is assumed the string is not a query string. * * @param str The url-encoded string * @@ -316,14 +315,13 @@ * by a valid 2-digit hexadecimal number */ public static String URLDecode(String str) { - return URLDecode(str, null); - } - - + + /** - * Decode and return the specified URL-encoded String. + * Decode and return the specified URL-encoded String. It is assumed the + * string is not a query string. * * @param str The url-encoded string * @param enc The encoding to use; if null, the default encoding is used @@ -331,7 +329,19 @@ * by a valid 2-digit hexadecimal number */ public static String URLDecode(String str, String enc) { - + return URLDecode(str, enc, false); + } + + /** + * Decode and return the specified URL-encoded String. + * + * @param str The url-encoded string + * @param enc The encoding to use; if null, the default encoding is used + * @param isQuery Is this a query string being processed + * @exception IllegalArgumentException if a '%' character is not followed + * by a valid 2-digit hexadecimal number + */ + public static String URLDecode(String str, String enc, boolean isQuery) { if (str == null) return (null); @@ -347,13 +357,14 @@ } } catch (UnsupportedEncodingException uee) {} - return URLDecode(bytes, enc); + return URLDecode(bytes, enc, isQuery); } /** - * Decode and return the specified URL-encoded byte array. + * Decode and return the specified URL-encoded byte array. It is assumed + * the string is not a query string. * * @param bytes The url-encoded byte array * @exception IllegalArgumentException if a '%' character is not followed @@ -365,7 +376,8 @@ /** - * Decode and return the specified URL-encoded byte array. + * Decode and return the specified URL-encoded byte array. It is assumed + * the string is not a query string. * * @param bytes The url-encoded byte array * @param enc The encoding to use; if null, the default encoding is used @@ -373,7 +385,20 @@ * by a valid 2-digit hexadecimal number */ public static String URLDecode(byte[] bytes, String enc) { + return URLDecode(bytes, null, false); + } + /** + * Decode and return the specified URL-encoded byte array. + * + * @param bytes The url-encoded byte array + * @param enc The encoding to use; if null, the default encoding is used + * @param isQuery Is this a query string being processed + * @exception IllegalArgumentException if a '%' character is not followed + * by a valid 2-digit hexadecimal number + */ + public static String URLDecode(byte[] bytes, String enc, boolean isQuery) { + if (bytes == null) return (null); @@ -382,7 +407,7 @@ int ox = 0; while (ix < len) { byte b = bytes[ix++]; // Get byte to test - if (b == '+') { + if (b == '+' && isQuery) { b = (byte)' '; } else if (b == '%') { b = (byte) ((convertHexDigit(bytes[ix++]) << 4) @@ -461,7 +486,6 @@ throws UnsupportedEncodingException { if (data != null && data.length > 0) { - int pos = 0; int ix = 0; int ox = 0; String key = null; Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?view=diff&rev=562625&r1=562624&r2=562625 ============================================================================== --- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original) +++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Fri Aug 3 17:15:53 2007 @@ -54,6 +54,10 @@ <bug>42547</bug>: Fix NPE when a ResourceLink in context.xml tries to override an env-entry in web.xml. (markt) </fix> + <fix> + <bug>42944</bug>: Correctly handle servlet mappings that use a '+' + character as part of the url pattern. (markt) + </fix> </changelog> </subsection> <subsection name="Jasper"> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]