PQ Crypta Logo

A second GOAWAY naming a larger identifier than the first

Close the connection with H3_ID_ERROR. §5.2 permits multiple GOAWAY frames but requires the identifier in each to be no greater than any previously sent, because the identifier is a promise about what will still be processed and raising it takes that promise back. "Receiving a GOAWAY containing a larger identifier than previously received MUST be treated as a connection error of type H3_ID_ERROR."

PQ CRYPTA PLATFORM

🏠 Main

📰 News

👤 Account

⟨ QUANTUM ERROR PORTAL ⟩

Navigate the Error Dimensions

Jump to an anomaly59

Every one of these is a page: what the server emits, the clause it is judged against, and how each client answered. The full list carries the verdict tallies too.

h-goaway-increasing · RFC 9114 §5.2 · correctness · layer http3 · udp/4503 · MUST

Passing this means: Rejected something invalid, with the code the RFC names.

Anomaly type: control_stream

How each client answered

ClientVersionVerdictWhat 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 0x108. 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 0x108.
aioquic 1.3.0 (PyPI wheel) Fail Rejected, but with error 0x105 where the specification requires 0x108. The violation was detected; the code reported is wrong.
chromium build 1248 Pass Rejected with the required error code 0x108.
quic-go quic-go v0.61.0 (h1:9So2anK4Tp22) Pass Rejected with the required error code 0x108.
quiche 0.30.0 (1c8e976) Pass Rejected with the required error code 0x108.
neqo 0.31.1 (cac2b74) Fail Rejected, but with error 0x101 where the specification requires 0x108. The violation was detected; the code reported is wrong.
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 0x108.
lsquic 4.9.4 (2b30189) Pass Rejected with the required error code 0x108.
xquic 2060a44 Pass Rejected with the required error code 0x108.
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 0x108.

What the clause requires

Close the connection with H3_ID_ERROR. §5.2 permits multiple GOAWAY frames but requires the identifier in each to be no greater than any previously sent, because the identifier is a promise about what will still be processed and raising it takes that promise back. "Receiving a GOAWAY containing a larger identifier than previously received MUST be treated as a connection error of type H3_ID_ERROR."

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-goaway-increasing")'