https://issues.apache.org/bugzilla/show_bug.cgi?id=51584

             Bug #: 51584
           Summary: Crash (infinite loop) when files starting with '#' are
                    in the library tree
           Product: Tomcat 7
           Version: trunk
          Platform: PC
            Status: NEW
          Severity: major
          Priority: P2
         Component: Catalina
        AssignedTo: dev@tomcat.apache.org
        ReportedBy: srloo...@us.ibm.com
    Classification: Unclassified


Situation:
 stray text file in my /WEB-INF/classes/...../ directory named
"#SurveyMain.java#"     ( It was a backup/autosaved source file, and eclipse
'helpfully' deployed it. ) 


 causes crash on startup in tomcat 7.0.6, 7.0.19 and 7.0.20-dev (1151601M). -
out of memory.


Added this test to .20-dev:

Index: org/apache/catalina/startup/ContextConfig.java
===================================================================
--- org/apache/catalina/startup/ContextConfig.java    (revision 1151601)
+++ org/apache/catalina/startup/ContextConfig.java    (working copy)
@@ -1902,6 +1902,7 @@
                 while (dirs.hasMoreElements()) {
                     String dir = dirs.nextElement();
                     URL dirUrl = new URL(url.toString() + '/' + dir);
+                    System.err.println("Processing: " + url.toString() + '/' +
dir);
                     processAnnotationsJndi(dirUrl, fragment);
                 }


Printed tons of lines… at startup…


Processing:
jndi:/localhost/cldr-apps/WEB-INF/classes/org/unicode/cldr/web/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/#SurveyMain.java#/....

Then crashed as before…

java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOfRange(Arrays.java:3209)
    at java.lang.String.<init>(String.java:215)
    at java.lang.StringBuilder.toString(StringBuilder.java:430)
    at java.io.UnixFileSystem.resolve(UnixFileSystem.java:93)
    at java.io.File.<init>(File.java:312)
    at org.apache.naming.resources.FileDirContext.list(FileDirContext.java:871)
    at org.apache.naming.resources.FileDirContext.list(FileDirContext.java:304)
    at
org.apache.naming.resources.ProxyDirContext.list(ProxyDirContext.java:506)
    at
org.apache.naming.resources.DirContextURLConnection.list(DirContextURLConnection.java:444)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1901)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)
    at
org.apache.catalina.startup.ContextConfig.processAnnotationsJndi(ContextConfig.java:1906)



I think the problem is that the URL generated contains a '#' and so file://
interprets it as a fragment and not as a path.

Quick patch:

Index: java/org/apache/catalina/startup/ContextConfig.java
===================================================================
--- java/org/apache/catalina/startup/ContextConfig.java    (revision 1151601)
+++ java/org/apache/catalina/startup/ContextConfig.java    (working copy)
@@ -1901,7 +1901,11 @@
                 Enumeration<String> dirs = dcUrlConn.list();
                 while (dirs.hasMoreElements()) {
                     String dir = dirs.nextElement();
+                    if(dir.startsWith("#")) {
+                        continue;
+                    }
                     URL dirUrl = new URL(url.toString() + '/' + dir);
+                    //System.err.println("Processing: " + dirUrl.toString());
                     processAnnotationsJndi(dirUrl, fragment);
                 }

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to