h-max-push-id
· RFC 9114 §7.2.7 · correctness · layer http3 · udp/4486 · MUST NOT
Passing this means: Rejected something invalid, with the code the RFC names.
Anomaly type: control_stream
How each client answered
| Client | Version | Verdict | What happened |
|---|---|---|---|
| curl | libcurl/8.23.0 ngtcp2/1.25.0 | Fail | Objected at the QUIC layer (rejected at the QUIC layer with INTERNAL_ERROR) instead of signalling the HTTP/3 error. The violation was detected and rejected, which is the right instinct; §8.1 requires an HTTP/3 connection error to be carried in an application close, and this test names 0x105. A transport close carries no HTTP/3 code at all, so a peer has no way to learn what was wrong. |
| quinn | noq fork (189b0ed) | Pass | Rejected with the required error code 0x105. |
| aioquic | 1.3.0 (PyPI wheel) | Pass | Rejected with the required error code 0x105. |
| chromium | build 1248 | Pass | Rejected with the required error code 0x105. |
| quic-go | quic-go v0.61.0 (h1:9So2anK4Tp22) | Pass | Rejected with the required error code 0x105. |
| quiche | 0.30.0 (1c8e976) | Pass | Rejected with the required error code 0x105. |
| neqo | 0.31.1 (cac2b74) | Pass | Rejected with the required error code 0x105. |
| picoquic | 8162550 | Fail | Accepted a protocol violation and carried on. The anomaly was on the control stream, and this client extended flow-control credit on it -- a receiver extends credit on a stream only once its application has consumed what was already there, so the bytes were read rather than merely delivered. This should have been rejected. |
| ngtcp2 | 3c23148 | Pass | Rejected with the required error code 0x105. |
| lsquic | 4.9.4 (2b30189) | Pass | Rejected with the required error code 0x105. |
| xquic | 2060a44 | Pass | Rejected with the required error code 0x105. |
| msquic | 2.7.0 (7e6525d) | Fail | Accepted a protocol violation and carried on. The anomaly was on the control stream, and this client extended flow-control credit on it -- a receiver extends credit on a stream only once its application has consumed what was already there, so the bytes were read rather than merely delivered. This should have been rejected. |
| quico | 0.7.0 (npm) | Pass | Rejected with the required error code 0x105. |
What the clause requires
Reject with H3_FRAME_UNEXPECTED. MAX_PUSH_ID travels client to server only, so a server sending one is using a frame in a direction the specification does not allow.
Judged against RFC 9114.
Run this one yourself
Every test is reachable from your own client. Nothing here needs an account.
curl -s https://conformance.pqcrypta.com/catalog.json \
| jq '.tests[] | select(.id == "h-max-push-id")'