PQ Crypta Logo

Field line indexing a static table entry that does not exist

Close the connection with QPACK_DECOMPRESSION_FAILED (0x200). The static table has 99 entries, so index 200 refers to nothing, and §3.1 is explicit: "When the decoder encounters an invalid static table index in a field line representation, it MUST treat this as a connection error of type QPACK_DECOMPRESSION_FAILED." The static table needs no permission and never changes size, so unlike the dynamic-table tests this one applies to every client.

PQ CRYPTA PLATFORM

🏠 Main

🧪 Interactive Apps

📰 News

🛡️ PQ Crypta Proxy

👤 Account

⟨ QUANTUM ERROR PORTAL ⟩

Navigate the Error Dimensions

h-qpack-static-index-invalid · RFC 9204 §3.1, §4.5.2 · correctness · layer http3 · udp/4505 · MUST

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

Anomaly type: response_stream

How each client answered

ClientVersionVerdictWhat happened
curl ngtcp2/1.11.0 Inconclusive Objected, but at the QUIC layer (rejected at the QUIC layer with INTERNAL_ERROR), so the HTTP/3 error code could not be read. §8.1 carries an HTTP/3 connection error in an application close, and this test asks for 0x200 specifically — whether that was the client's reasoning is not observable from here.
quinn noq fork Inconclusive The client completed its request and then said nothing further before the window closed. A rejection whose CONNECTION_CLOSE was lost cannot be told apart from a client that never objected: QUIC re-sends that frame only in answer to an incoming packet, so one that goes missing is simply never seen.
aioquic 1.3.0 Pass Rejected with the required error code 0x200.
chromium build 1223 Pass Rejected with the required error code 0x200.
quic-go quic-go v0.61.0 Inconclusive The client completed its request and then said nothing further before the window closed. A rejection whose CONNECTION_CLOSE was lost cannot be told apart from a client that never objected: QUIC re-sends that frame only in answer to an incoming packet, so one that goes missing is simply never seen.
quiche 0.30.0 Pass Rejected with the required error code 0x200.
neqo 0.31.1 Pass Rejected with the required error code 0x200.

What the clause requires

Close the connection with QPACK_DECOMPRESSION_FAILED (0x200). The static table has 99 entries, so index 200 refers to nothing, and §3.1 is explicit: "When the decoder encounters an invalid static table index in a field line representation, it MUST treat this as a connection error of type QPACK_DECOMPRESSION_FAILED." The static table needs no permission and never changes size, so unlike the dynamic-table tests this one applies to every client.

Judged against RFC 9204.

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-qpack-static-index-invalid")'

What this suite is · The full grid · All clients · All tests · Findings