PQ Crypta Logo

PRIORITY_UPDATE sent by the server

Reject it with H3_FRAME_UNEXPECTED, or ignore it — which is conformant depends on whether you implement extensible priorities at all, and that is not observable from here. A client that does implement RFC 9218 is bound by §7.2: servers "MUST NOT send PRIORITY_UPDATE frames of either type", and a client receiving one MUST treat it as a connection error of that type. A client that does not implement it sees frame type 0xf0700 as simply unknown, and RFC 9114 §9 requires unknown frame types to be ignored — so ignoring it is equally correct, for a different reason. Scoring this as a failure either way would accuse one of those two clients of a violation it did not commit, so the report says which answer was given rather than grading it.

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-priority-update · RFC 9218 §7.2 · discretionary · layer http3 · udp/4498 · MUST NOT

Passing this means: The RFC permits either behaviour; the report says which was chosen.

Anomaly type: control_stream

How each client answered

ClientVersionVerdictWhat happened
curl libcurl/8.23.0 ngtcp2/1.25.0 Pass Rejected it (rejected at the QUIC layer with INTERNAL_ERROR). The specification permits this but does not require it; a client that ignored it would also be conformant.
quinn noq fork (189b0ed) Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 1152ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
aioquic 1.3.0 (PyPI wheel) Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 1403ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
chromium build 1248 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 1754ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
quic-go quic-go v0.61.0 (h1:9So2anK4Tp22) Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 3064ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
quiche 0.30.0 (1c8e976) Pass Rejected with error 0x105. The specification permits this but does not require it; a client that ignored it would also be conformant.
neqo 0.31.1 (cac2b74) Pass Rejected with error 0x105. The specification permits this but does not require it; a client that ignored it would also be conformant.
picoquic 8162550 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 1052ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
ngtcp2 3c23148 Pass Rejected with error 0x105. The specification permits this but does not require it; a client that ignored it would also be conformant.
lsquic 4.9.4 (2b30189) Pass Rejected with error 0x105. The specification permits this but does not require it; a client that ignored it would also be conformant.
xquic 2060a44 Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 1252ms 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) Pass Tolerated it and continued. The specification permits this but does not require it; a client that rejected it would also be conformant. The client process had already exited 1302ms in, before this test's reaction point at never observed, so the silence after that is not evidence either way.
quico 0.7.0 (npm) Pass Rejected with error 0x105. The specification permits this but does not require it; a client that ignored it would also be conformant.

What the clause requires

Reject it with H3_FRAME_UNEXPECTED, or ignore it — which is conformant depends on whether you implement extensible priorities at all, and that is not observable from here. A client that does implement RFC 9218 is bound by §7.2: servers "MUST NOT send PRIORITY_UPDATE frames of either type", and a client receiving one MUST treat it as a connection error of that type. A client that does not implement it sees frame type 0xf0700 as simply unknown, and RFC 9114 §9 requires unknown frame types to be ignored — so ignoring it is equally correct, for a different reason. Scoring this as a failure either way would accuse one of those two clients of a violation it did not commit, so the report says which answer was given rather than grading it.

Judged against RFC 9218.

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-priority-update")'