Author: fhanik Date: Fri Mar 16 09:15:45 2007 New Revision: 519036 URL: http://svn.apache.org/viewvc?view=rev&rev=519036 Log: Add some options for handling URL chars, backport from TC 6.0.x
Modified: tomcat/connectors/branches/tc4.1.x/coyote/src/java/org/apache/coyote/tomcat4/CoyoteAdapter.java tomcat/connectors/branches/tc4.1.x/util/java/org/apache/tomcat/util/buf/UDecoder.java Modified: tomcat/connectors/branches/tc4.1.x/coyote/src/java/org/apache/coyote/tomcat4/CoyoteAdapter.java URL: http://svn.apache.org/viewvc/tomcat/connectors/branches/tc4.1.x/coyote/src/java/org/apache/coyote/tomcat4/CoyoteAdapter.java?view=diff&rev=519036&r1=519035&r2=519036 ============================================================================== --- tomcat/connectors/branches/tc4.1.x/coyote/src/java/org/apache/coyote/tomcat4/CoyoteAdapter.java (original) +++ tomcat/connectors/branches/tc4.1.x/coyote/src/java/org/apache/coyote/tomcat4/CoyoteAdapter.java Fri Mar 16 09:15:45 2007 @@ -50,7 +50,8 @@ final class CoyoteAdapter implements Adapter { - + protected static final boolean ALLOW_BACKSLASH = + Boolean.valueOf(System.getProperty("org.apache.coyote.tomcat4.CoyoteAdapter.ALLOW_BACKSLASH", "false")).booleanValue(); // -------------------------------------------------------------- Constants @@ -439,8 +440,12 @@ return "/"; // Normalize the slashes and add leading slash if necessary - if (normalized.indexOf('\\') >= 0) - normalized = normalized.replace('\\', '/'); + if (normalized.indexOf('\\') >= 0) { + if ( ALLOW_BACKSLASH ) + normalized = normalized.replace('\\', '/'); + else + return null; + } if (!normalized.startsWith("/")) normalized = "/" + normalized; @@ -563,8 +568,12 @@ // Replace '\' with '/' // Check for null byte for (pos = start; pos < end; pos++) { - if (b[pos] == (byte) '\\') - b[pos] = (byte) '/'; + if (b[pos] == (byte) '\\') { + if (ALLOW_BACKSLASH) + b[pos] = (byte) '/'; + else + return false; + } if (b[pos] == (byte) 0) return false; } Modified: tomcat/connectors/branches/tc4.1.x/util/java/org/apache/tomcat/util/buf/UDecoder.java URL: http://svn.apache.org/viewvc/tomcat/connectors/branches/tc4.1.x/util/java/org/apache/tomcat/util/buf/UDecoder.java?view=diff&rev=519036&r1=519035&r2=519036 ============================================================================== --- tomcat/connectors/branches/tc4.1.x/util/java/org/apache/tomcat/util/buf/UDecoder.java (original) +++ tomcat/connectors/branches/tc4.1.x/util/java/org/apache/tomcat/util/buf/UDecoder.java Fri Mar 16 09:15:45 2007 @@ -28,7 +28,9 @@ * @author Costin Manolache */ public final class UDecoder { - + protected static final boolean ALLOW_ENCODED_SLASH = + Boolean.valueOf(System.getProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "false")).booleanValue(); + private static org.apache.commons.logging.Log log= org.apache.commons.logging.LogFactory.getLog(UDecoder.class ); @@ -65,6 +67,8 @@ // idx will be the smallest positive inxes ( first % or + ) if( idx2 >= 0 && idx2 < idx ) idx=idx2; if( idx < 0 ) idx=idx2; + + boolean noSlash = !(ALLOW_ENCODED_SLASH || query); for( int j=idx; j<end; j++, idx++ ) { if( buff[ j ] == '+' && query) { @@ -83,6 +87,12 @@ j+=2; int res=x2c( b1, b2 ); + + if (noSlash && (res == '/')) { + throw new CharConversionException( "noSlash"); + } + + buff[idx]=(byte)res; } } @@ -124,6 +134,8 @@ if( idx2 >= 0 && idx2 < idx ) idx=idx2; if( idx < 0 ) idx=idx2; + + boolean noSlash = !(ALLOW_ENCODED_SLASH || query); for( int j=idx; j<cend; j++, idx++ ) { if( buff[ j ] == '+' && query ) { @@ -143,6 +155,11 @@ j+=2; int res=x2c( b1, b2 ); + + if (noSlash && (res == '/')) { + throw new CharConversionException( "noSlash"); + } + buff[idx]=(char)res; } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]