Fix bug 44282. Do call to getClassLoader() in a privileged block.
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Wed, 30 Jan 2008 23:24:48 +0000 (23:24 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Wed, 30 Jan 2008 23:24:48 +0000 (23:24 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@616953 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/loader/WebappClassLoader.java

index 0b313a4..e037273 100644 (file)
@@ -55,6 +55,7 @@ import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 import javax.naming.directory.DirContext;
 
+import org.apache.catalina.Globals;
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.LifecycleListener;
@@ -129,6 +130,23 @@ public class WebappClassLoader
 
     }
 
+    
+    protected final class PrivilegedGetClassLoader
+        implements PrivilegedAction<ClassLoader> {
+
+        public Class<?> clazz;
+
+        public PrivilegedGetClassLoader(Class<?> clazz){
+            this.clazz = clazz;
+        }
+
+        public ClassLoader run() {       
+            return clazz.getClassLoader();
+        }           
+    }
+
+    
+
 
     // ------------------------------------------------------- Static Variables
 
@@ -907,8 +925,17 @@ public class WebappClassLoader
         // Return the class we have located
         if (log.isTraceEnabled())
             log.debug("      Returning class " + clazz);
-        if ((log.isTraceEnabled()) && (clazz != null))
-            log.debug("      Loaded by " + clazz.getClassLoader());
+        
+        if ((log.isTraceEnabled()) && (clazz != null)) {
+            ClassLoader cl;
+            if (Globals.IS_SECURITY_ENABLED){
+                cl = AccessController.doPrivileged(
+                    new PrivilegedGetClassLoader(clazz));
+            } else {
+                cl = clazz.getClassLoader();
+            }
+            log.debug("      Loaded by " + cl.toString());
+        }
         return (clazz);
 
     }