PQ Crypta Logo

SETTINGS_H3_DATAGRAM with a value that is neither 0 nor 1

Close the connection with H3_SETTINGS_ERROR. Unusually for a setting, RFC 9297 pins down the invalid-value case rather than leaving it open: the value "MUST be either 0 or 1", and if one "is received with a value that is neither 0 nor 1, the receiver MUST terminate the connection with error H3_SETTINGS_ERROR". This is the setting that gates HTTP Datagrams and so WebTransport, which means a client that implements either has real parsing behind it rather than an ignored identifier.

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-datagram-setting-invalid · RFC 9297 §2.1.1 · correctness · layer http3 · udp/4501 · 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 0x109. 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 0x109.
aioquic 1.3.0 (PyPI wheel) Pass Rejected with the required error code 0x109.
chromium build 1248 Pass Rejected with the required error code 0x109.
quic-go quic-go v0.61.0 (h1:9So2anK4Tp22) Fail Rejected, but with error 0x106 where the specification requires 0x109. The violation was detected; the code reported is wrong.
quiche 0.30.0 (1c8e976) Pass Rejected with the required error code 0x109.
neqo 0.31.1 (cac2b74) Pass Rejected with the required error code 0x109.
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 0x109.
lsquic 4.9.4 (2b30189) 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.
xquic 2060a44 Inconclusive The client completed its request and closed without objecting, and the anomaly was on the control stream — a unidirectional stream nothing obliges it to read on any schedule. Accepting the violation and never reaching the stream look the same from here. The one signal that separates reading from receiving is a flow-control credit grant, and a receiver grants credit only as its consumption approaches the window it advertised, so a client with a large window reads everything sent and says nothing. Not a judgement withheld — a distinction this vantage point cannot draw for this client. The client process had already exited 1553ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
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 0x109.

What the clause requires

Close the connection with H3_SETTINGS_ERROR. Unusually for a setting, RFC 9297 pins down the invalid-value case rather than leaving it open: the value "MUST be either 0 or 1", and if one "is received with a value that is neither 0 nor 1, the receiver MUST terminate the connection with error H3_SETTINGS_ERROR". This is the setting that gates HTTP Datagrams and so WebTransport, which means a client that implements either has real parsing behind it rather than an ignored identifier.

Judged against RFC 9297.

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-datagram-setting-invalid")'