PQ Crypta Logo

PUSH_PROMISE for a push the client never allowed

Close the connection with H3_ID_ERROR. §7.2.7 leaves the maximum push ID unset until the client sends MAX_PUSH_ID, so a server "cannot push until it receives a MAX_PUSH_ID frame" and every push ID is larger than the client has advertised. §7.2.5 is explicit about the answer: a client "MUST treat receipt of a PUSH_PROMISE frame that contains a larger push ID than the client has advertised as a connection error of H3_ID_ERROR".

PQ CRYPTA PLATFORM

🏠 Main

🧪 Interactive Apps

📰 News

🛡️ PQ Crypta Proxy

👤 Account

⟨ QUANTUM ERROR PORTAL ⟩

Navigate the Error Dimensions

h-push-promise-unsolicited · RFC 9114 §7.2.5, §4.6 · correctness · layer http3 · udp/4500 · MUST

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

Anomaly type: control_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 0x108 specifically — whether that was the client's reasoning is not observable from here.
quinn noq fork Fail Rejected, but with error 0x105 where the specification requires 0x108. The violation was detected; the code reported is wrong.
aioquic 1.3.0 Fail Rejected, but with error 0x105 where the specification requires 0x108. The violation was detected; the code reported is wrong.
chromium build 1223 Fail Rejected, but with error 0x106 where the specification requires 0x108. The violation was detected; the code reported is wrong.
quic-go quic-go v0.61.0 Inconclusive The client completed its request and closed without objecting, but the anomaly was written to the control stream — a unidirectional stream nothing obliges it to read on any schedule. A one-shot request can finish before that stream is picked up, so this is equally consistent with accepting the violation and with never having seen it, and neither can be told from here.
quiche 0.30.0 Fail Rejected, but with error 0x105 where the specification requires 0x108. The violation was detected; the code reported is wrong.
neqo 0.31.1 Fail Rejected, but with error 0x105 where the specification requires 0x108. The violation was detected; the code reported is wrong.

What the clause requires

Close the connection with H3_ID_ERROR. §7.2.7 leaves the maximum push ID unset until the client sends MAX_PUSH_ID, so a server "cannot push until it receives a MAX_PUSH_ID frame" and every push ID is larger than the client has advertised. §7.2.5 is explicit about the answer: a client "MUST treat receipt of a PUSH_PROMISE frame that contains a larger push ID than the client has advertised as a connection error of 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-push-promise-unsolicited")'

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