This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 8.5.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 8ed541f67662f9dbd98a73ca0701de6b84e823e3 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 e32cbe8..e82e26c 100644 --- a/java/org/apache/catalina/servlets/WebdavServlet.java +++ b/java/org/apache/catalina/servlets/WebdavServlet.java @@ -1924,22 +1924,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()) { @@ -1950,19 +1946,15 @@ 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 + " " + WebdavStatus.getStatusText(errorCode)); generatedXML.writeElement("D", "status", XMLWriter.CLOSING); generatedXML.writeElement("D", "response", XMLWriter.CLOSING); - } generatedXML.writeElement("D", "multistatus", XMLWriter.CLOSING); @@ -1970,7 +1962,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 e2414fd..d69f9d0 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -134,6 +134,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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org