From 8ca867df084770f6a78b3f417dafccfea02db9bb Mon Sep 17 00:00:00 2001
From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Date: Wed, 10 Jun 2020 22:19:24 +0900
Subject: [PATCH] Don't send CONNECTION_CLOSE if client has not sent anything

---
 lib/ngtcp2_conn.c        | 1 +
 tests/ngtcp2_conn_test.c | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/lib/ngtcp2_conn.c b/lib/ngtcp2_conn.c
index ca7123d3..a3716ea1 100644
--- a/lib/ngtcp2_conn.c
+++ b/lib/ngtcp2_conn.c
@@ -8594,6 +8594,7 @@ ngtcp2_ssize ngtcp2_conn_write_connection_close(ngtcp2_conn *conn,
   }
 
   switch (conn->state) {
+  case NGTCP2_CS_CLIENT_INITIAL:
   case NGTCP2_CS_CLOSING:
   case NGTCP2_CS_DRAINING:
     return NGTCP2_ERR_INVALID_STATE;
diff --git a/tests/ngtcp2_conn_test.c b/tests/ngtcp2_conn_test.c
index df149bb1..5218323e 100644
--- a/tests/ngtcp2_conn_test.c
+++ b/tests/ngtcp2_conn_test.c
@@ -5243,6 +5243,10 @@ void test_ngtcp2_conn_write_connection_close(void) {
   /* Client only Initial key */
   setup_handshake_client(&conn);
 
+  spktlen = ngtcp2_conn_write_pkt(conn, NULL, buf, sizeof(buf), 0);
+
+  CU_ASSERT(spktlen > 0);
+
   spktlen = ngtcp2_conn_write_connection_close(conn, NULL, buf, sizeof(buf),
                                                NGTCP2_NO_ERROR, 0);
 
@@ -5259,6 +5263,10 @@ void test_ngtcp2_conn_write_connection_close(void) {
   /* Client has Initial and Handshake keys */
   setup_handshake_client(&conn);
 
+  spktlen = ngtcp2_conn_write_pkt(conn, NULL, buf, sizeof(buf), 0);
+
+  CU_ASSERT(spktlen > 0);
+
   ngtcp2_conn_install_tx_handshake_key(conn, null_key, null_iv, null_hp_key,
                                        sizeof(null_key), sizeof(null_iv));
   ngtcp2_conn_set_aead_overhead(conn, NGTCP2_FAKE_AEAD_OVERHEAD);
-- 
GitLab