]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
QUIC CONFORMANCE: RFC 9000 s. 19.14: STREAMS_BLOCKED Frames
authorHugo Landau <hlandau@openssl.org>
Tue, 6 Jun 2023 15:25:11 +0000 (16:25 +0100)
committerPauli <pauli@openssl.org>
Sun, 16 Jul 2023 22:17:57 +0000 (08:17 +1000)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/21135)

ssl/quic/quic_rx_depack.c

index be4772e2f370e47a2f0003b21bfd7b1554ff22f2..2506c8398cfcac5b18ee57331c74b67e143502e6 100644 (file)
@@ -835,6 +835,20 @@ static int depack_do_frame_streams_blocked(PACKET *pkt,
     /* This frame makes the packet ACK eliciting */
     ackm_data->is_ack_eliciting = 1;
 
+    if (max_data > (((uint64_t)1) << 60)) {
+        /*
+         * RFC 9000 s. 19.14: "This value cannot exceed 2**60, as it is not
+         * possible to encode stream IDs larger than 2**62 - 1. Receipt of a
+         * frame that encodes a larger stream ID MUST be treated as a connection
+         * error of type STREAM_LIMIT_ERROR or FRAME_ENCODING_ERROR."
+         */
+        ossl_quic_channel_raise_protocol_error(ch,
+                                               QUIC_ERR_STREAM_LIMIT_ERROR,
+                                               frame_type,
+                                               "invalid stream count limit");
+        return 0;
+    }
+
     /* No-op - informative/debugging frame. */
     return 1;
 }