From 57e45e9bfd3f3cc3f327aec6b519258312c370c1 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> Date: Sun, 2 Aug 2020 23:11:59 +0900 Subject: [PATCH] Fix memory leak --- lib/ngtcp2_strm.c | 6 ++++++ tests/ngtcp2_strm_test.c | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/ngtcp2_strm.c b/lib/ngtcp2_strm.c index 2a0c0c91..7c46d9b6 100644 --- a/lib/ngtcp2_strm.c +++ b/lib/ngtcp2_strm.c @@ -367,6 +367,12 @@ int ngtcp2_strm_streamfrq_pop(ngtcp2_strm *strm, ngtcp2_frame_chain **pfrc, if (left == 0) { /* datalen could be zero if 0 length STREAM has been sent */ if (datalen || ngtcp2_ksl_len(strm->tx.streamfrq) > 1) { + rv = ngtcp2_ksl_insert(strm->tx.streamfrq, NULL, &fr->offset, frc); + if (rv != 0) { + assert(ngtcp2_err_is_fatal(rv)); + ngtcp2_frame_chain_del(frc, strm->mem); + return rv; + } *pfrc = NULL; return 0; } diff --git a/tests/ngtcp2_strm_test.c b/tests/ngtcp2_strm_test.c index 21f0ecd1..8d2d23d2 100644 --- a/tests/ngtcp2_strm_test.c +++ b/tests/ngtcp2_strm_test.c @@ -290,6 +290,17 @@ void test_ngtcp2_strm_streamfrq_pop(void) { ngtcp2_frame_chain_del(frc, mem); ngtcp2_strm_free(&strm); + + /* left == 0 and there is outstanding data */ + setup_strm_streamfrq_fixture(&strm, mem); + + frc = NULL; + rv = ngtcp2_strm_streamfrq_pop(&strm, &frc, 0); + + CU_ASSERT(0 == rv); + CU_ASSERT(NULL == frc); + + ngtcp2_strm_free(&strm); } void test_ngtcp2_strm_streamfrq_unacked_offset(void) { -- GitLab