diff --git a/lib/ngtcp2_conn.c b/lib/ngtcp2_conn.c index ca7123d32ccd1a6c9a5084e0cfac81ab76c8a11e..a3716ea18f091c32e486493725ddebff43a1da15 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 df149bb1fef4300fdf8470356b8e3ee57023965a..5218323ee87b5778d3d922f840c0012c8c152f85 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);