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]>

Reply via email to