validation by file upload fails on tomcat 11 (Unable to process parts as no multi-part configuration has been provided)
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 250
- Forks
- 123
- PR merge metrics
- No merged PRs in 30d
Description
When serving the webapp on tomcat11 an trying to run a validation by file upload (or by direct input), it fails like this:
HTTP Status 500 – Internal Server Error
Type Exception Report
Message Unable to process parts as no multi-part configuration has been provided
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided
org.apache.catalina.connector.Request.parseParts(Request.java:2440)
org.apache.catalina.connector.Request.doParseParameters(Request.java:2805)
org.apache.catalina.connector.Request.parseParameters(Request.java:2763)
org.apache.catalina.connector.Request.getParameter(Request.java:1065)
org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:152)
org.w3c.css.servlet.CssValidator.doPost(CssValidator.java:512)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:649)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:710)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.
Apache Tomcat/11.0.6 (Debian)
Suggest fix, although I don't really understand what it means:
https://lists.apache.org/thread/hjoxo22r3tq91wy2sx50fg493typxrdt
However, using allowCasualMultipartParsing="true" on the Context as suggested reveals another error:
Jul 06 14:35:09 debian tomcat11[1393521]: [DEBUG] looks for boundary in
Jul 06 14:35:09 debian tomcat11[1393521]: [multipart/form-data; boundary=---------------------------33444491373505500661090814999]
Jul 06 14:35:09 debian tomcat11[1393521]: [DEBUG] p is [boundary]
Jul 06 14:35:09 debian tomcat11[1393521]: [START OF DATA]
Jul 06 14:35:09 debian tomcat11[1393521]: [END OF DATA]
Jul 06 14:35:09 debian tomcat11[1393521]: boundary : -----------------------------33444491373505500661090814999&10
Jul 06 14:35:09 debian tomcat11[1393521]: &10
Jul 06 14:35:09 debian tomcat11[1393521]: -----------------------------33444491373505500661090814999&10
Jul 06 14:35:09 debian tomcat11[1393521]: &10
Jul 06 14:35:09 debian tomcat11[1393521]: -----------------------------33444491373505500661090814999--
Jul 06 14:35:09 debian tomcat11[1393521]: Oups! Error in Util/Codecs.java?!?
Jul 06 14:35:09 debian tomcat11[1393521]: java.io.IOException: Starting boundary not found: -----------------------------33444491373505500661090814999
Jul 06 14:35:09 debian tomcat11[1393521]: at org.w3c.css.util.Codecs.mpFormDataDecode(Codecs.java:169)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.w3c.css.util.Codecs.mpFormDataDecode(Codecs.java:165)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.w3c.css.servlet.CssValidator.doPost(CssValidator.java:582)
Jul 06 14:35:09 debian tomcat11[1393521]: at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:649)
Jul 06 14:35:09 debian tomcat11[1393521]: at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:710)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:130)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:109)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:79)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:666)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:396)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:59)
Jul 06 14:35:09 debian tomcat11[1393521]: at java.base/java.lang.Thread.run(Thread.java:840)
Jul 06 14:35:09 debian tomcat11[1393521]: error: Cannot invoke "String.toLowerCase()" because "text" is null
Jul 06 14:35:09 debian tomcat11[1393521]: [ERROR VALIDATOR] file://localhost/TextArea
Jul 06 14:35:09 debian tomcat11[1393521]: java.lang.NullPointerException
Jul 06 14:35:09 debian tomcat11[1393521]: java.lang.NullPointerException
Jul 06 14:35:09 debian tomcat11[1393521]: at java.base/java.io.Reader.<init>(Reader.java:168)
Jul 06 14:35:09 debian tomcat11[1393521]: at java.base/java.io.InputStreamReader.<init>(InputStreamReader.java:112)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.w3c.css.css.StyleSheetParser.parseStyleElement(StyleSheetParser.java:423)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.w3c.css.servlet.CssValidator.doPost(CssValidator.java:726)
Jul 06 14:35:09 debian tomcat11[1393521]: at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:649)
Jul 06 14:35:09 debian tomcat11[1393521]: at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:710)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:130)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:109)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:79)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:666)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:396)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:59)
Jul 06 14:35:09 debian tomcat11[1393521]: at java.base/java.lang.Thread.run(Thread.java:840)
Jul 06 14:35:09 debian tomcat11[1393521]: java.lang.NullPointerException
Jul 06 14:35:09 debian tomcat11[1393521]: at java.base/java.io.Reader.<init>(Reader.java:168)
Jul 06 14:35:09 debian tomcat11[1393521]: at java.base/java.io.InputStreamReader.<init>(InputStreamReader.java:112)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.w3c.css.css.StyleSheetParser.parseStyleElement(StyleSheetParser.java:423)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.w3c.css.servlet.CssValidator.doPost(CssValidator.java:726)
Jul 06 14:35:09 debian tomcat11[1393521]: at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:649)
Jul 06 14:35:09 debian tomcat11[1393521]: at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:710)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:130)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:109)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:79)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:116)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:666)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:396)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
Jul 06 14:35:09 debian tomcat11[1393521]: at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:59)
Jul 06 14:35:09 debian tomcat11[1393521]: at java.base/java.lang.Thread.run(Thread.java:840)
Same error appears on tomcat10 if we set allowCasualMultipartParsing="true"
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the multipart validation failure on Tomcat 11, starting at org.w3c.css.servlet.CssValidator.doPost and the request handling around lines 512, 582, and 726. Read org.w3c.css.util.Codecs.mpFormDataDecode and StyleSheetParser.parseStyleElement, then compare the multipart boundary and text-area paths. Done means file-upload and direct-input validation no longer produce the reported parsing or null-input errors.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100