Author: markt
Date: Fri Apr 25 11:04:24 2014
New Revision: 1589990
URL: http://svn.apache.org/r1589990
Log:
More defensive coding around some XML activities that are triggered by web
applications and are therefore at potential risk of a memory leak.
Modified:
tomcat/trunk/java/org/apache/tomcat/util/descriptor/tld/TldParser.java
Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/tld/TldParser.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/tld/TldParser.java?rev=1589990&r1=1589989&r2=1589990&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/tld/TldParser.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/tld/TldParser.java Fri
Apr 25 11:04:24 2014
@@ -18,13 +18,17 @@ package org.apache.tomcat.util.descripto
import java.io.IOException;
import java.io.InputStream;
+import java.security.AccessController;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.util.descriptor.Constants;
import org.apache.tomcat.util.descriptor.DigesterFactory;
import org.apache.tomcat.util.descriptor.XmlErrorHandler;
import org.apache.tomcat.util.digester.Digester;
import org.apache.tomcat.util.digester.RuleSet;
+import org.apache.tomcat.util.security.PrivilegedGetTccl;
+import org.apache.tomcat.util.security.PrivilegedSetTccl;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -47,7 +51,20 @@ public class TldParser {
}
public TaglibXml parse(TldResourcePath path) throws IOException,
SAXException {
+ ClassLoader original;
+ if (Constants.IS_SECURITY_ENABLED) {
+ PrivilegedGetTccl pa = new PrivilegedGetTccl();
+ original = AccessController.doPrivileged(pa);
+ } else {
+ original = Thread.currentThread().getContextClassLoader();
+ }
try (InputStream is = path.openStream()) {
+ if (Constants.IS_SECURITY_ENABLED) {
+ PrivilegedSetTccl pa = new
PrivilegedSetTccl(TldParser.class.getClassLoader());
+ AccessController.doPrivileged(pa);
+ } else {
+
Thread.currentThread().setContextClassLoader(TldParser.class.getClassLoader());
+ }
XmlErrorHandler handler = new XmlErrorHandler();
digester.setErrorHandler(handler);
@@ -67,6 +84,12 @@ public class TldParser {
return taglibXml;
} finally {
digester.reset();
+ if (Constants.IS_SECURITY_ENABLED) {
+ PrivilegedSetTccl pa = new PrivilegedSetTccl(original);
+ AccessController.doPrivileged(pa);
+ } else {
+ Thread.currentThread().setContextClassLoader(original);
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]