Author: markt
Date: Tue Dec 11 14:29:27 2018
New Revision: 1848687
URL: http://svn.apache.org/viewvc?rev=1848687&view=rev
Log:
Implement the requirements of section 8.2.2 2c of the Servlet specification and
prevent a web application from deploying if it has fragments with duplicate
names and is configured to use relative ordering of fragments.
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/LocalStrings.properties
tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/LocalStrings.properties?rev=1848687&r1=1848686&r2=1848687&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/LocalStrings.properties
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/LocalStrings.properties
Tue Dec 11 14:29:27 2018
@@ -19,6 +19,7 @@ servletDef.invalidServletName=Invalid <s
webXml.duplicateEnvEntry=Duplicate env-entry name [{0}]
webXml.duplicateFilter=Duplicate filter name [{0}]
+webXml.duplicateFragment=More than one fragment with the name [{0}] was found.
This is not legal with relative ordering. See section 8.2.2 2c of the Servlet
specification for details. Consider using absolute ordering.
webXml.duplicateMessageDestination=Duplicate message-destination name [{0}]
webXml.duplicateMessageDestinationRef=Duplicate message-destination-ref name
[{0}]
webXml.duplicateResourceEnvRef=Duplicate resource-env-ref name [{0}]
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java?rev=1848687&r1=1848686&r2=1848687&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/deploy/WebXml.java Tue Dec 11
14:29:27 2018
@@ -76,6 +76,19 @@ public class WebXml {
this.overridable = overridable;
}
+ /*
+ * Ideally, fragment names will be unique. If they are not, Tomcat needs
+ * to know as the action that the specification requires (see 8.2.2 1.e and
+ * 2.c) varies depending on the ordering method used.
+ */
+ private boolean duplicated = false;
+ public boolean isDuplicated() {
+ return duplicated;
+ }
+ public void setDuplicated(boolean duplicated) {
+ this.duplicated = duplicated;
+ }
+
// web.xml only elements
// Absolute Ordering
private Set<String> absoluteOrdering = null;
@@ -2319,6 +2332,13 @@ public class WebXml {
}
}
} else {
+ // Stage 0. Check there were no fragments with duplicate names
+ for (WebXml fragment : fragments.values()) {
+ if (fragment.isDuplicated()) {
+ throw new IllegalArgumentException(
+ sm.getString("webXml.duplicateFragment",
fragment.getName()));
+ }
+ }
// Stage 1. Make all dependencies bi-directional - this makes the
// next stage simpler.
for (WebXml fragment : fragments.values()) {
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1848687&r1=1848686&r2=1848687&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/ContextConfig.java
Tue Dec 11 14:29:27 2018
@@ -2699,12 +2699,7 @@ public class ContextConfig implements Li
if (jar != null) {
jar.close();
}
- fragment.setURL(url);
- if (fragment.getName() == null) {
- fragment.setName(fragment.getURL().toString());
- }
- fragment.setJarName(extractJarFileName(url));
- fragments.put(fragment.getName(), fragment);
+ addFragment(fragment, url);
}
}
@@ -2745,13 +2740,26 @@ public class ContextConfig implements Li
} catch (IOException e) {
}
}
- fragment.setURL(file.toURI().toURL());
- if (fragment.getName() == null) {
- fragment.setName(fragment.getURL().toString());
- }
- fragment.setJarName(file.getName());
- fragments.put(fragment.getName(), fragment);
+ addFragment(fragment, file.toURI().toURL());
+ }
+ }
+
+ private void addFragment(WebXml fragment, URL url) {
+ fragment.setURL(url);
+ if (fragment.getName() == null) {
+ fragment.setName(url.toString());
}
+ fragment.setJarName(extractJarFileName(url));
+ if (fragments.containsKey(fragment.getName())) {
+ // Duplicate. Mark the fragment that has already been found
with
+ // this name as having a duplicate so Tomcat can handle it
+ // correctly when the fragments are being ordered.
+ String duplicateName = fragment.getName();
+ fragments.get(duplicateName).setDuplicated(true);
+ // Rename the current fragment so it doesn't clash
+ fragment.setName(url.toString());
+ }
+ fragments.put(fragment.getName(), fragment);
}
public Map<String,WebXml> getFragments() {
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1848687&r1=1848686&r2=1848687&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Tue Dec 11 14:29:27 2018
@@ -83,6 +83,12 @@
web application start to make integration simpler for downstream users.
Based on a patch provided by rmannibucau. (markt)
</scode>
+ <fix>
+ Implement the requirements of section 8.2.2 2c of the Servlet
+ specification and prevent a web application from deploying if it has
+ fragments with duplicate names and is configured to use relative
+ ordering of fragments. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Other">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]