https://bz.apache.org/bugzilla/show_bug.cgi?id=69713
Bug ID: 69713
Summary: HTTP/2 DATA frame with padding cause error when
HEADERS contains content-length field.
Product: Tomcat 10
Version: unspecified
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P2
Component: Connectors
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ------
When HEADERS contains 'content-length' field and DATA frame is padded, it
causes Connection error.
tomcat-1 | 12-Jun-2025 02:18:55.721 FINE [https-openssl-nio-8443-exec-4]
org.apache.coyote.http2.Http2UpgradeHandler.upgradeDispatch Connection error
tomcat-1 | org.apache.coyote.http2.ConnectionException: Connection [0],
Stream [1], The content length header value [3] does not agree with the size of
the data received [127]
tomcat-1 | at
org.apache.coyote.http2.Stream.receivedData(Stream.java:684)
tomcat-1 | at
org.apache.coyote.http2.Http2UpgradeHandler.startRequestBodyFrame(Http2UpgradeHandler.java:1553)
tomcat-1 | at
org.apache.coyote.http2.Http2AsyncUpgradeHandler.startRequestBodyFrame(Http2AsyncUpgradeHandler.java:43)
tomcat-1 | at
org.apache.coyote.http2.Http2Parser.readDataFrame(Http2Parser.java:191)
tomcat-1 | at
org.apache.coyote.http2.Http2AsyncParser$FrameCompletionHandler.completed(Http2AsyncParser.java:251)
tomcat-1 | at
org.apache.coyote.http2.Http2AsyncParser$FrameCompletionHandler.completed(Http2AsyncParser.java:167)
tomcat-1 | at
org.apache.tomcat.util.net.SocketWrapperBase$VectoredIOCompletionHandler.completed(SocketWrapperBase.java:1040)
tomcat-1 | at
org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1687)
tomcat-1 | at
org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:987)
tomcat-1 | at
org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1358)
tomcat-1 | at
org.apache.tomcat.util.net.SocketWrapperBase.read(SocketWrapperBase.java:1214)
tomcat-1 | at
org.apache.tomcat.util.net.SocketWrapperBase.read(SocketWrapperBase.java:1190)
tomcat-1 | at
org.apache.coyote.http2.Http2AsyncParser.readFrame(Http2AsyncParser.java:140)
tomcat-1 | at
org.apache.coyote.http2.Http2Parser.readFrame(Http2Parser.java:87)
tomcat-1 | at
org.apache.coyote.http2.Http2UpgradeHandler.upgradeDispatch(Http2UpgradeHandler.java:356)
tomcat-1 | at
org.apache.coyote.http2.Http2AsyncUpgradeHandler.upgradeDispatch(Http2AsyncUpgradeHandler.java:43)
tomcat-1 | at
org.apache.coyote.http2.Http2AsyncParser$PrefaceCompletionHandler.completed(Http2AsyncParser.java:130)
tomcat-1 | at
org.apache.coyote.http2.Http2AsyncParser$PrefaceCompletionHandler.completed(Http2AsyncParser.java:62)
tomcat-1 | at
org.apache.tomcat.util.net.SocketWrapperBase$VectoredIOCompletionHandler.completed(SocketWrapperBase.java:1040)
tomcat-1 | at
org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1687)
tomcat-1 | at
org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:987)
tomcat-1 | at
org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1358)
tomcat-1 | at
org.apache.tomcat.util.net.SocketWrapperBase.read(SocketWrapperBase.java:1214)
tomcat-1 | at
org.apache.tomcat.util.net.SocketWrapperBase.read(SocketWrapperBase.java:1190)
tomcat-1 | at
org.apache.coyote.http2.Http2AsyncParser.readConnectionPreface(Http2AsyncParser.java:57)
tomcat-1 | at
org.apache.coyote.http2.Http2UpgradeHandler.init(Http2UpgradeHandler.java:248)
tomcat-1 | at
org.apache.coyote.http2.Http2AsyncUpgradeHandler.init(Http2AsyncUpgradeHandler.java:43)
tomcat-1 | at
org.apache.coyote.http2.Http2UpgradeHandler.upgradeDispatch(Http2UpgradeHandler.java:334)
tomcat-1 | at
org.apache.coyote.http2.Http2AsyncUpgradeHandler.upgradeDispatch(Http2AsyncUpgradeHandler.java:43)
tomcat-1 | at
org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60)
tomcat-1 | at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57)
tomcat-1 | at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:903)
tomcat-1 | at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1769)
tomcat-1 | at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
tomcat-1 | at
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189)
tomcat-1 | at
org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658)
tomcat-1 | at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
tomcat-1 | at java.base/java.lang.Thread.run(Thread.java:1583)
The test of padded DATA frame is here
https://github.com/apache/tomcat/blob/main/test/org/apache/coyote/http2/Http2TestBase.java#L388
https://github.com/apache/tomcat/blob/main/test/org/apache/coyote/http2/TestHttp2Section_6_1.java#L50
But it tests only the case that HEADERS frame does not contain 'content-length'
field.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]