Author: markt Date: Thu Nov 21 12:59:36 2013 New Revision: 1544165 URL: http://svn.apache.org/r1544165 Log: Extend the reach of the Context attribute xmlValidation to cover XML parsing by Jasper the JSP engine. Fix a TODO and enable validation (if required) for implicit TLD files.
Modified: tomcat/trunk/java/org/apache/catalina/Globals.java tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java tomcat/trunk/java/org/apache/jasper/Constants.java tomcat/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java tomcat/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java tomcat/trunk/java/org/apache/jasper/compiler/TldCache.java tomcat/trunk/java/org/apache/jasper/servlet/JasperInitializer.java tomcat/trunk/webapps/docs/config/context.xml Modified: tomcat/trunk/java/org/apache/catalina/Globals.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Globals.java?rev=1544165&r1=1544164&r2=1544165&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/Globals.java (original) +++ tomcat/trunk/java/org/apache/catalina/Globals.java Thu Nov 21 12:59:36 2013 @@ -14,18 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - - package org.apache.catalina; - /** * Global constants that are applicable to multiple packages within Catalina. * * @author Craig R. McClanahan * @version $Id$ */ - public final class Globals { /** @@ -273,4 +269,14 @@ public final class Globals { * the tomcat instance installation path */ public static final String CATALINA_BASE_PROP = "catalina.base"; + + + /** + * Name of the ServletContext attribute that determines if the JSP engine + * should validate *.tld, *.jspx and *.tagx files when parsing them. + * <p> + * This must be kept in sync with org.apache.japser.Constants + */ + public static final String JASPER_XML_VALIDATION_ATTR = + "org.apache.jasper.XML_VALIDATE"; } Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java?rev=1544165&r1=1544164&r2=1544165&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/ApplicationContext.java Thu Nov 21 12:59:36 2013 @@ -221,6 +221,12 @@ public class ApplicationContext @Override public Object getAttribute(String name) { + // Special handling for XML validation as the context setting must + // always override anything that might have been set by an application. + if (Globals.JASPER_XML_VALIDATION_ATTR.equals(name) && + context.getXmlValidation()) { + return Boolean.TRUE; + } return (attributes.get(name)); } @@ -234,6 +240,11 @@ public class ApplicationContext public Enumeration<String> getAttributeNames() { Set<String> names = new HashSet<>(); names.addAll(attributes.keySet()); + // Special handling for XML validation as this attribute will always be + // available if validation has been enabled on the context + if (context.getXmlValidation()) { + names.add(Globals.JASPER_XML_VALIDATION_ATTR); + } return Collections.enumeration(names); } Modified: tomcat/trunk/java/org/apache/jasper/Constants.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/Constants.java?rev=1544165&r1=1544164&r2=1544165&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/Constants.java (original) +++ tomcat/trunk/java/org/apache/jasper/Constants.java Thu Nov 21 12:59:36 2013 @@ -150,4 +150,13 @@ public class Constants { * the tomcat product installation path */ public static final String CATALINA_HOME_PROP = "catalina.home"; + + + /** + * Name of the ServletContext attribute that determines if the XML parsers + * used for *.tld, *.jspx and *.tagx files will be validating or not. + * <p> + * This must be kept in sync with org.apache.catalina.Globals + */ + public static final String XML_VALIDATION_ATTR = "org.apache.jasper.XML_VALIDATE"; } Modified: tomcat/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java?rev=1544165&r1=1544164&r2=1544165&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java Thu Nov 21 12:59:36 2013 @@ -29,6 +29,7 @@ import javax.servlet.jsp.tagext.TagFileI import javax.servlet.jsp.tagext.TagInfo; import javax.servlet.jsp.tagext.TagLibraryInfo; +import org.apache.jasper.Constants; import org.apache.jasper.JasperException; import org.apache.jasper.JspCompilationContext; import org.apache.tomcat.util.descriptor.tld.ImplicitTldRuleSet; @@ -118,8 +119,10 @@ class ImplicitTagLibraryInfo extends Tag try { URL url = ctxt.getResource(path); TldResourcePath resourcePath = new TldResourcePath(url, path); - // TODO enable validation - TldParser parser = new TldParser(true, false, new ImplicitTldRuleSet()); + boolean validate = Boolean.parseBoolean( + ctxt.getServletContext().getInitParameter( + Constants.XML_VALIDATION_ATTR)); + TldParser parser = new TldParser(true, validate, new ImplicitTldRuleSet()); taglibXml = parser.parse(resourcePath); } catch (IOException | SAXException e) { err.jspError(e); Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java?rev=1544165&r1=1544164&r2=1544165&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/JspDocumentParser.java Thu Nov 21 12:59:36 2013 @@ -29,6 +29,7 @@ import javax.servlet.jsp.tagext.TagLibra import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; +import org.apache.jasper.Constants; import org.apache.jasper.JasperException; import org.apache.jasper.JspCompilationContext; import org.apache.tomcat.util.descriptor.tld.TldResourcePath; @@ -163,8 +164,13 @@ class JspDocumentParser jspDocParser.isTop = false; } + boolean validate = Boolean.parseBoolean( + pc.getJspCompilationContext().getServletContext().getInitParameter( + Constants.XML_VALIDATION_ATTR)); + jspDocParser.isValidating = validate; + // Parse the input - SAXParser saxParser = getSAXParser(false, jspDocParser); + SAXParser saxParser = getSAXParser(validate, jspDocParser); InputStream inStream = null; try { inStream = JspUtil.getInputStream(path, jar, jspDocParser.ctxt); Modified: tomcat/trunk/java/org/apache/jasper/compiler/TldCache.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/TldCache.java?rev=1544165&r1=1544164&r2=1544165&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/TldCache.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/TldCache.java Thu Nov 21 12:59:36 2013 @@ -25,8 +25,8 @@ import java.util.Map.Entry; import javax.servlet.ServletContext; +import org.apache.jasper.Constants; import org.apache.jasper.JasperException; -import org.apache.jasper.servlet.JasperInitializer; import org.apache.tomcat.util.descriptor.tld.TaglibXml; import org.apache.tomcat.util.descriptor.tld.TldParser; import org.apache.tomcat.util.descriptor.tld.TldResourcePath; @@ -73,7 +73,7 @@ public class TldCache { this.tldResourcePathTaglibXmlMap.put(tldResourcePath, cacheEntry); } boolean validate = Boolean.parseBoolean( - servletContext.getInitParameter(JasperInitializer.VALIDATE)); + servletContext.getInitParameter(Constants.XML_VALIDATION_ATTR)); tldParser = new TldParser(true, validate); } Modified: tomcat/trunk/java/org/apache/jasper/servlet/JasperInitializer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JasperInitializer.java?rev=1544165&r1=1544164&r2=1544165&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/servlet/JasperInitializer.java (original) +++ tomcat/trunk/java/org/apache/jasper/servlet/JasperInitializer.java Thu Nov 21 12:59:36 2013 @@ -24,6 +24,7 @@ import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.jsp.JspFactory; +import org.apache.jasper.Constants; import org.apache.jasper.compiler.Localizer; import org.apache.jasper.compiler.TldCache; import org.apache.jasper.runtime.JspFactoryImpl; @@ -36,11 +37,7 @@ import org.xml.sax.SAXException; * Initializer for the Jasper JSP Engine. */ public class JasperInitializer implements ServletContainerInitializer { - /** - * Name of ServletContext initParam that determines if descriptor XML - * should be validated. - */ - public static final String VALIDATE = "org.apache.jasper.validateDescriptors"; + private static final String MSG = "org.apache.jasper.servlet.JasperInitializer"; private static final Log log = LogFactory.getLog(JasperInitializer.class); @@ -81,7 +78,8 @@ public class JasperInitializer implement log.debug(Localizer.getMessage(MSG + ".onStartup", context.getServletContextName())); } - boolean validate = Boolean.parseBoolean(context.getInitParameter(VALIDATE)); + boolean validate = Boolean.parseBoolean( + context.getInitParameter(Constants.XML_VALIDATION_ATTR)); // scan the application for TLDs TldScanner scanner = new TldScanner(context, true, validate); Modified: tomcat/trunk/webapps/docs/config/context.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/context.xml?rev=1544165&r1=1544164&r2=1544165&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/context.xml (original) +++ tomcat/trunk/webapps/docs/config/context.xml Thu Nov 21 12:59:36 2013 @@ -531,8 +531,12 @@ </attribute> <attribute name="xmlValidation" required="false"> - <p>If the value of this flag is <code>true</code>, the XML files - will be validated on context startup. If the + <p>If the value of this flag is <code>true</code>, the parsing of + <code>web.xml</code>, <code>web-fragment.xml</code>, <code>*.tld</code>, + <code>*.jspx</code> and <code>*.tagx</code> files for this web + application will use a validating parser. Note that the + <code>tagPlugins.xml</code> file (if any) is never parsed using a + validating parser. If the <code>org.apache.catalina.STRICT_SERVLET_COMPLIANCE</code> <a href="systemprops.html">system property</a> is set to <code>true</code>, the default value of this attribute will be --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org