You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2022/02/11 15:58:54 UTC
[tomcat] 01/02: Fix a potential exception when generating a WebDAV multi-status response
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit c521dc50c85c7ee8b458282a9c90c150ebab8e84
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Fri Feb 11 15:33:44 2022 +0000
Fix a potential exception when generating a WebDAV multi-status response
Fix a potential StringIndexOutOfBoundsException exception when
generating a WebDAV multi-status response after an error during a copy
or delete.
Report the paths relative to the server root for any resources with an
error.
---
java/org/apache/catalina/servlets/WebdavServlet.java | 19 +++++--------------
webapps/docs/changelog.xml | 6 ++++++
2 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/java/org/apache/catalina/servlets/WebdavServlet.java b/java/org/apache/catalina/servlets/WebdavServlet.java
index a9701b0..c6a0963 100644
--- a/java/org/apache/catalina/servlets/WebdavServlet.java
+++ b/java/org/apache/catalina/servlets/WebdavServlet.java
@@ -1922,22 +1922,18 @@ public class WebdavServlet extends DefaultServlet {
* @param req Servlet request
* @param resp Servlet response
* @param errorList List of error to be displayed
+ *
* @throws IOException If an IO error occurs
*/
private void sendReport(HttpServletRequest req, HttpServletResponse resp,
- Hashtable<String,Integer> errorList)
- throws IOException {
+ Hashtable<String,Integer> errorList) throws IOException {
resp.setStatus(WebdavStatus.SC_MULTI_STATUS);
- String absoluteUri = req.getRequestURI();
- String relativePath = getRelativePath(req);
-
XMLWriter generatedXML = new XMLWriter();
generatedXML.writeXMLHeader();
- generatedXML.writeElement("D", DEFAULT_NAMESPACE, "multistatus",
- XMLWriter.OPENING);
+ generatedXML.writeElement("D", DEFAULT_NAMESPACE, "multistatus", XMLWriter.OPENING);
Enumeration<String> pathList = errorList.keys();
while (pathList.hasMoreElements()) {
@@ -1948,18 +1944,14 @@ public class WebdavServlet extends DefaultServlet {
generatedXML.writeElement("D", "response", XMLWriter.OPENING);
generatedXML.writeElement("D", "href", XMLWriter.OPENING);
- String toAppend = errorPath.substring(relativePath.length());
- if (!toAppend.startsWith("/")) {
- toAppend = "/" + toAppend;
- }
- generatedXML.writeText(absoluteUri + toAppend);
+ generatedXML.writeText(getServletContext().getContextPath() + errorPath);
generatedXML.writeElement("D", "href", XMLWriter.CLOSING);
+
generatedXML.writeElement("D", "status", XMLWriter.OPENING);
generatedXML.writeText("HTTP/1.1 " + errorCode + " ");
generatedXML.writeElement("D", "status", XMLWriter.CLOSING);
generatedXML.writeElement("D", "response", XMLWriter.CLOSING);
-
}
generatedXML.writeElement("D", "multistatus", XMLWriter.CLOSING);
@@ -1967,7 +1959,6 @@ public class WebdavServlet extends DefaultServlet {
Writer writer = resp.getWriter();
writer.write(generatedXML.toString());
writer.close();
-
}
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 2a16a97..62d492d 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -139,6 +139,12 @@
Tomcat will not load from web applications. Pull request provided by
ppkarwasz. (markt)
</fix>
+ <fix>
+ Fix a potential <code>StringIndexOutOfBoundsException</code> exception
+ when generating a WebDAV multi-status response after an error during a
+ copy or delete. Report the paths relative to the server root for any
+ resources with an error. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org