MINOR: h3: report error on control stream close
As specified by RFC 9114 the control stream must not be closed. If the
peer behaves incorrectly and closes it, emit a H3_CLOSED_CRITICAL_STREAM
connection error.
diff --git a/src/h3.c b/src/h3.c
index 688f903..026f7d9 100644
--- a/src/h3.c
+++ b/src/h3.c
@@ -625,6 +625,18 @@
return total;
}
+ /* RFC 9114 6.2.1. Control Streams
+ *
+ * The sender MUST NOT close the control stream, and the receiver MUST NOT
+ * request that the sender close the control stream. If either control
+ * stream is closed at any point, this MUST be treated as a connection
+ * error of type H3_CLOSED_CRITICAL_STREAM.
+ */
+ if (h3s->type == H3S_T_CTRL && fin) {
+ qcc_emit_cc_app(qcs->qcc, H3_CLOSED_CRITICAL_STREAM, 1);
+ return -1;
+ }
+
while (b_data(b) && !(qcs->flags & QC_SF_DEM_FULL)) {
uint64_t ftype, flen;
char last_stream_frame = 0;