Crossposting to watchdog-dev as this should be of interest

I've made some modifications to catalina.core.ApplicationContext
to fix a bug reported in bugzilla (don't have the number, bugzilla
is currently unreachable from here...search on ServletContext...has
to do with consecutive '//').  Also, these changes needed to pass a
new test that I recently submitted to watchdog-dev.

The changes are simply:
  1. Return null if input path argument is null (currently, NPE thrown)
  2. Return null if a NamingException occurs in looking up a path
     (all the occurrances of NamingException [I've seen] report
     the error: "resource not found") (current empty set is returned)
  3. Change all occurrances of the pattern "/*" in the input path to "/"

These changes reflect my understanding of the doc for this method.
I send an earlier email on watchdog-dev asking for clarifications:

http://www.mail-archive.com/watchdog-dev%40jakarta.apache.org/msg00358.html

But since I did not receive anything feedback, I just went ahead
and coded to my understanding.

- Gidado

Index: ApplicationContext.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationContext.java,v
retrieving revision 1.37
diff -u -r1.37 ApplicationContext.java
--- ApplicationContext.java     26 Apr 2002 21:18:18 -0000      1.37
+++ ApplicationContext.java     4 Jun 2002 16:07:23 -0000
@@ -690,6 +690,20 @@
      */
     public Set getResourcePaths(String path) {
 
+               // Check and canonicalize path (change '//' to '/')
+               if (path==null)
+                       return null;
+               StringBuffer buffer = new StringBuffer(path);
+               int length = buffer.length() - 1;
+               for (int i=0; i<length; i++) {
+                       if (buffer.charAt(i)=='/')
+                               while (buffer.charAt(i+1) == '/') {
+                                       buffer.deleteCharAt(i+1);
+                                       length--;
+                               }
+               }
+               path = buffer.toString();
+
         DirContext resources = context.getResources();
         if (resources != null) {
             if (System.getSecurityManager() != null) {
@@ -717,7 +731,7 @@
         try {
             listCollectionPaths(set, resources, path);
         } catch (NamingException e) {
-            ; // Ignore
+                       return null;  // likely resource not found
         }
         set.setLocked(true);
         return (set);

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to