This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 10.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 43e9c8c1195b33e52b06af9c348d21f51d643355 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 e870286..8920403 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -139,6 +139,12 @@ <code>TomcatPrincipal</code> and <code>GenericPrincipal</code>. Patch provided by Carsten Klein. (michaelo) </add> + <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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org