"Stream ended unexpectedly" errors after upgrading to Lucee 7

After updating to Lucee 7 (from 5) we are seeing a lot of the errors below in application.log. I think these come from clients with network issues, or times where the user halts the request, or there is some other network issue. Somehow, the http post is not valid - the multipart body is incomplete - e.g. the closing boundary never arrives because the upload was cut off mid-stream.

To be clear the request still returns 200 - I’m not sure users are being affected (they are likely already disconnected from the request by the time the error occurs).

I would like to request a way to quiet these. They are not coming from my source code (see the stack trace), so for me they are essentially clutter in the application.log. I keep an eye on the application.log for errors that I can take action on.

So perhaps Lucee could have a way to turn these off, or perhaps by default they go to a different log file? (I see there is a scope.log file in the logs directory, but it is empty - perhaps that is where these are supposed to go).

I’m attaching a cfml script that can reproduce the error.

reproduce.cfm (2.8 KB)

"ERROR","ajp-nio-127.0.0.1-8009-exec-8","06/05/2026","15:15:45","http://localDevSite","form.scope","Stream ended unexpectedlyorg.apache.commons.fileupload2.core.MultipartInput$MalformedStreamException: Stream ended unexpectedly
	at org.apache.commons.fileupload2.core.MultipartInput.readHeaders(MultipartInput.java:937)
	at org.apache.commons.fileupload2.core.FileItemInputIteratorImpl.findNextItem(FileItemInputIteratorImpl.java:154)
	at org.apache.commons.fileupload2.core.FileItemInputIteratorImpl.<init>(FileItemInputIteratorImpl.java:118)
	at org.apache.commons.fileupload2.core.AbstractFileUpload.getItemIterator(AbstractFileUpload.java:305)
	at org.apache.commons.fileupload2.core.AbstractFileUpload.parseRequest(AbstractFileUpload.java:467)
	at lucee.runtime.type.scope.jakarta.JakartaServletFileUpload.parseRequest(JakartaServletFileUpload.java:109)
	at lucee.runtime.type.scope.FormImpl.initializeMultiPart(FormImpl.java:199)
	at lucee.runtime.type.scope.FormImpl.initialize(FormImpl.java:135)
	at lucee.runtime.PageContextImpl.formScope(PageContextImpl.java:1473)
	at lucee.runtime.type.scope.UndefinedImpl.reinitialize(UndefinedImpl.java:650)
	at lucee.runtime.type.scope.UndefinedImpl.initialize(UndefinedImpl.java:630)
	at lucee.runtime.type.scope.UndefinedImpl.initialize(UndefinedImpl.java:600)
	at lucee.runtime.PageContextImpl.initialize(PageContextImpl.java:579)
	at lucee.runtime.CFMLFactoryImpl.getPageContextImpl(CFMLFactoryImpl.java:248)
	at lucee.runtime.engine.CFMLEngineImpl._service(CFMLEngineImpl.java:1201)
	at lucee.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:1190)
	at lucee.loader.engine.CFMLEngineWrapper.serviceCFML(CFMLEngineWrapper.java:99)
	at lucee.loader.servlet.jakarta.CFMLServlet.service(CFMLServlet.java:41)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:128)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:107)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at com.intergral.fusionreactor.j2ee.jakarta.filterchain.WrappedFilterChain.doFilter(WrappedFilterChain.java:132)
	at com.intergral.fusionreactor.j2ee.jakarta.filter.FusionReactorRequestHandler.doNext(FusionReactorRequestHandler.java:705)
	at com.intergral.fusionreactor.j2ee.jakarta.filter.FusionReactorRequestHandler.doHttpServletRequest(FusionReactorRequestHandler.java:263)
	at com.intergral.fusionreactor.j2ee.jakarta.filter.FusionReactorRequestHandler.doFusionRequest(FusionReactorRequestHandler.java:126)
	at com.intergral.fusionreactor.j2ee.jakarta.filter.FusionReactorRequestHandler.handle(FusionReactorRequestHandler.java:743)
	at com.intergral.fusionreactor.j2ee.jakarta.filter.FusionReactorCoreFilter.doFilter(FusionReactorCoreFilter.java:35)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at com.intergral.fusionreactor.j2ee.jakarta.filterchain.WrappedFilterChain.doFilter(WrappedFilterChain.java:69)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at com.intergral.fusionreactor.agent.filter.FusionReactorStaticFilter.doFilterJakarta(FusionReactorStaticFilter.java:282)
	at com.intergral.fusionreactor.agent.pointcuts.jakarta.JakartaNewFilterChainPointCut$1.invoke(JakartaNewFilterChainPointCut.java:48)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:165)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:77)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:113)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:83)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:72)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
	at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:424)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1779)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:946)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:480)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:57)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: No more data is available
	at org.apache.commons.fileupload2.core.MultipartInput.readByte(MultipartInput.java:902)
	at org.apache.commons.fileupload2.core.MultipartInput.readHeaders(MultipartInput.java:932)
	... 53 more
"

OS: Windows Server
Java Version: 21.0.11
Tomcat Version: 11.0.21
Lucee Version: 7.0.3.43