ASF Bugzilla – Attachment 14517 Details for
Bug 34034
Jasper didn't respect external entities
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
a patch to allow Jasper to resolve external entities located in WEBAPP
jasper.patch (text/plain), 5.61 KB, created by
Henri Gomez
on 2005-03-18 14:47:36 UTC
(
hide
)
Description:
a patch to allow Jasper to resolve external entities located in WEBAPP
Filename:
MIME Type:
Creator:
Henri Gomez
Created:
2005-03-18 14:47:36 UTC
Size:
5.61 KB
patch
obsolete
>Index: org/apache/jasper/compiler/JspConfig.java >=================================================================== >RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspConfig.java,v >retrieving revision 1.16 >diff -u -r1.16 JspConfig.java >--- org/apache/jasper/compiler/JspConfig.java 17 Mar 2004 19:23:03 -0000 1.16 >+++ org/apache/jasper/compiler/JspConfig.java 18 Mar 2005 09:31:46 -0000 >@@ -27,6 +27,7 @@ > import org.apache.jasper.JasperException; > import org.apache.jasper.xmlparser.ParserUtils; > import org.apache.jasper.xmlparser.TreeNode; >+import org.xml.sax.InputSource; > > /** > * Handles the jsp-config element in WEB_INF/web.xml. This is used >@@ -66,8 +67,16 @@ > return; > } > >+ InputSource ip = new InputSource(is); >+ >+ // Set a SystemId, base is /WEB-INF/, avoid parser being stuck when >+ // trying to find relative references >+ ip.setSystemId("/WEB-INF/"); >+ > ParserUtils pu = new ParserUtils(); >- TreeNode webApp = pu.parseXMLDocument(WEB_XML, is); >+ // Set the ServletContext so parser could get external entities located in webapp >+ pu.setServletContext(ctxt); >+ TreeNode webApp = pu.parseXMLDocument(WEB_XML, ip); > if (webApp == null > || !"2.4".equals(webApp.findAttribute("version"))) { > defaultIsELIgnored = "true"; >Index: org/apache/jasper/xmlparser/ParserUtils.java >=================================================================== >RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/xmlparser/ParserUtils.java,v >retrieving revision 1.11 >diff -u -r1.11 ParserUtils.java >--- org/apache/jasper/xmlparser/ParserUtils.java 17 Sep 2004 21:02:34 -0000 1.11 >+++ org/apache/jasper/xmlparser/ParserUtils.java 18 Mar 2005 09:31:46 -0000 >@@ -19,6 +19,7 @@ > import java.io.IOException; > import java.io.InputStream; > >+import javax.servlet.ServletContext; > import javax.xml.parsers.DocumentBuilder; > import javax.xml.parsers.DocumentBuilderFactory; > import javax.xml.parsers.ParserConfigurationException; >@@ -65,23 +66,31 @@ > */ > static EntityResolver entityResolver = new MyEntityResolver(); > >+ /** >+ * A ServletContext used to resolv external entites >+ */ >+ private ServletContext ctxt; >+ > // Turn off for JSP 2.0 until switch over to using xschema. > public static boolean validating = false; > > > // --------------------------------------------------------- Public Methods > >+ public void setServletContext(ServletContext pctxt) { >+ ctxt = pctxt; >+ } > /** > * Parse the specified XML document, and return a <code>TreeNode</code> > * that corresponds to the root node of the document tree. > * > * @param uri URI of the XML document being parsed >- * @param is Input stream containing the deployment descriptor >+ * @param is Input source containing the deployment descriptor > * > * @exception JasperException if an input/output error occurs > * @exception JasperException if a parsing error occurs > */ >- public TreeNode parseXMLDocument(String uri, InputStream is) >+ public TreeNode parseXMLDocument(String uri, InputSource is) > throws JasperException { > > Document document = null; >@@ -93,7 +102,16 @@ > factory.setNamespaceAware(true); > factory.setValidating(validating); > DocumentBuilder builder = factory.newDocumentBuilder(); >- builder.setEntityResolver(entityResolver); >+ >+ // If we have ServletContext, pass it to EntityResolver which >+ // will try to grab external entities via getResourceAsStream >+ if (ctxt != null) { >+ MyEntityResolver mer = new MyEntityResolver(); >+ mer.ctxt = ctxt; >+ builder.setEntityResolver(mer); >+ } >+ else >+ builder.setEntityResolver(entityResolver); > builder.setErrorHandler(errorHandler); > document = builder.parse(is); > } catch (ParserConfigurationException ex) { >@@ -119,6 +137,20 @@ > } > > >+ /** >+ * Parse the specified XML document, and return a <code>TreeNode</code> >+ * that corresponds to the root node of the document tree. >+ * >+ * @param uri URI of the XML document being parsed >+ * @param is Input stream containing the deployment descriptor >+ * >+ * @exception JasperException if an input/output error occurs >+ * @exception JasperException if a parsing error occurs >+ */ >+ public TreeNode parseXMLDocument(String uri, InputStream is) >+ throws JasperException { >+ return (parseXMLDocument(uri, new InputSource(is))); >+ } > // ------------------------------------------------------ Protected Methods > > >@@ -176,6 +208,8 @@ > > class MyEntityResolver implements EntityResolver { > >+ ServletContext ctxt = null; >+ > public InputSource resolveEntity(String publicId, String systemId) > throws SAXException > { >@@ -194,6 +228,14 @@ > return isrc; > } > } >+ // a ServletContext was defined, use it and resolve entities located in /WEB-INF >+ if (ctxt != null) { >+ if ((systemId != null) && (publicId == null)) { >+ if (systemId.startsWith("file:///WEB-INF/")) >+ return new InputSource(ctxt.getResourceAsStream(systemId.substring(7))); >+ } >+ } >+ > if (ParserUtils.log.isDebugEnabled()) > ParserUtils.log.debug("Resolve entity failed" + publicId + " " > + systemId );
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 34034
:
14517
|
14546