billbarker 02/01/08 23:43:20 Modified: src/share/org/apache/tomcat/modules/generators StaticInterceptor.java Log: Make the (redundant) check for WEB-INF optional. This was reported against 4.x as bug #5724. However, in our case it actually prevents things that are explicitly promised to work in the spec. Revision Changes Path 1.18 +25 -11 jakarta-tomcat/src/share/org/apache/tomcat/modules/generators/StaticInterceptor.java Index: StaticInterceptor.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/generators/StaticInterceptor.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- StaticInterceptor.java 31 Dec 2001 22:26:34 -0000 1.17 +++ StaticInterceptor.java 9 Jan 2002 07:43:20 -0000 1.18 @@ -78,6 +78,7 @@ int realFileNote=-1; boolean useAcceptLanguage=true; String charset=null; + private boolean extraSafety=false; public StaticInterceptor() { } @@ -103,7 +104,13 @@ public void setUseCharset(String charset) { this.charset=charset; } - + /** Request extra safety checks. + * Defaults to <code>false</code> since it also prevents + * certain include/forwards from working. + */ + public void setExtraSafety(boolean safe) { + extraSafety = safe; + } public void engineInit(ContextManager cm) throws TomcatException { // if( debug>0 ) log("Engine init " ); @@ -125,6 +132,7 @@ fileHandler.setModule( this ); fileHandler.setContext( ctx ); fileHandler.setNoteId( realFileNote ); + fileHandler.setExtraSafety(extraSafety); ctx.addServlet( fileHandler ); dirHandler.setNoteId( realFileNote ); @@ -268,6 +276,7 @@ final class FileHandler extends Handler { int realFileNote; Context context; + private boolean extraSafety=false; FileHandler() { // setOrigin( Handler.ORIGIN_INTERNAL ); @@ -278,6 +287,9 @@ this.context=ctx; } + public void setExtraSafety(boolean safe) { + extraSafety = safe; + } public void setNoteId( int n ) { realFileNote=n; } @@ -379,17 +391,19 @@ log("Ends with \\/. " + absPath); return null; } - if (absPath.length() > base.length()) - { - String relPath=absPath.substring( base.length() + 1); - if( debug>0) log( "RelPath = " + relPath ); - - String relPathU=relPath.toUpperCase(); - if ( relPathU.startsWith("WEB-INF") || - relPathU.startsWith("META-INF") || - (relPathU.indexOf("/WEB-INF/") >= 0) || - (relPathU.indexOf("/META-INF/") >= 0) ) { + if(extraSafety) { + if (absPath.length() > base.length()) + { + String relPath=absPath.substring( base.length() + 1); + if( debug>0) log( "RelPath = " + relPath ); + + String relPathU=relPath.toUpperCase(); + if ( relPathU.startsWith("WEB-INF") || + relPathU.startsWith("META-INF") || + (relPathU.indexOf("/WEB-INF/") >= 0) || + (relPathU.indexOf("/META-INF/") >= 0) ) { return null; + } } } return absPath;
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>