This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 6d09f2f4622ea2d4c53f2f5c1ce0ed5b1b241585
Author: Mark Thomas <[email protected]>
AuthorDate: Thu Mar 19 15:23:19 2026 +0000

    Add HTTP/2 test from CoPilot review of 0de12dcc
    
    Add test for HTTP/2 HEADERS frame with both PADDED and PRIORITY flags too 
much padding
    
    Co-authored-by: copilot-swe-agent[bot] 
<[email protected]>
---
 .../apache/coyote/http2/TestHttp2Section_6_2.java  | 36 ++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/test/org/apache/coyote/http2/TestHttp2Section_6_2.java 
b/test/org/apache/coyote/http2/TestHttp2Section_6_2.java
index 9e903ceed9..107919c0e1 100644
--- a/test/org/apache/coyote/http2/TestHttp2Section_6_2.java
+++ b/test/org/apache/coyote/http2/TestHttp2Section_6_2.java
@@ -91,6 +91,42 @@ public class TestHttp2Section_6_2 extends Http2TestBase {
     }
 
 
+    @Test
+    public void testHeaderFrameTooMuchPaddingWithPriority() throws Exception {
+        // Tests the case where both PADDED and PRIORITY flags are set and the
+        // padding length is too large relative to the payload after accounting
+        // for the optional bytes (1 byte pad length + 5 bytes priority = 6 
bytes).
+        // With payloadSize=8 and padLength=3, the actual available payload
+        // after optional bytes is only 2, so padLength >= available triggers
+        // a PROTOCOL_ERROR and a GOAWAY frame must be sent.
+        http2Connect();
+
+        // 9 bytes frame header + 8 bytes payload
+        byte[] headerFrame = new byte[17];
+
+        // Header
+        // length = 8
+        ByteUtil.setThreeBytes(headerFrame, 0, 8);
+        headerFrame[3] = FrameType.HEADERS.getIdByte();
+        // flags: PADDED (0x08) | PRIORITY (0x20)
+        headerFrame[4] = 0x28;
+        // stream 3
+        ByteUtil.set31Bits(headerFrame, 5, 3);
+        // payload:
+        // pad length = 3 (too large: only 2 bytes remain after 6 optional 
bytes)
+        headerFrame[9] = 3;
+        // priority: 5 bytes (bytes 10-14, all zero)
+        // remaining 2 bytes: bytes 15-16 (all zero)
+
+        os.write(headerFrame);
+        os.flush();
+
+        // 1 is the last stream processed before the connection error (stream 1
+        // from the initial HTTP/1.1 upgrade)
+        handleGoAwayResponse(1);
+    }
+
+
     @Test
     public void testHeaderFrameWithZeroLengthPadding() throws Exception {
         http2Connect();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to