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