From 0e32849de56e7df006b1ddc3254676486a780421 Mon Sep 17 00:00:00 2001 From: George Wang Date: Thu, 20 Oct 2022 11:47:58 -0400 Subject: [PATCH] Release 3.2.0 --- CHANGELOG | 7 +++++++ docs/conf.py | 4 ++-- include/lsquic.h | 4 ++-- src/liblsquic/lsquic_rechist.c | 9 +++++---- tests/test_rechist.c | 1 + 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 41679b5..e420dd5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,10 @@ +2022-10-20 + - 3.2.0 + - Update ls-qpack to 2.5.0 to address a decoder bug + - Address a few corner cases that trigger assert failures. + - Properly handle unexpected large packet for gQUIC. + + 2022-08-16 - 3.1.2 - Update ls-qpack to 2.4.0 to address a use-after-free bug diff --git a/docs/conf.py b/docs/conf.py index f0b2f9d..b6e5942 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -24,9 +24,9 @@ copyright = u'2022, LiteSpeed Technologies' author = u'LiteSpeed Technologies' # The short X.Y version -version = u'3.1' +version = u'3.2' # The full version, including alpha/beta/rc tags -release = u'3.1.2' +release = u'3.2.0' # -- General configuration --------------------------------------------------- diff --git a/include/lsquic.h b/include/lsquic.h index 1532d21..0f772eb 100644 --- a/include/lsquic.h +++ b/include/lsquic.h @@ -24,8 +24,8 @@ extern "C" { #endif #define LSQUIC_MAJOR_VERSION 3 -#define LSQUIC_MINOR_VERSION 1 -#define LSQUIC_PATCH_VERSION 2 +#define LSQUIC_MINOR_VERSION 2 +#define LSQUIC_PATCH_VERSION 0 /** * Engine flags: diff --git a/src/liblsquic/lsquic_rechist.c b/src/liblsquic/lsquic_rechist.c index 12ae7c1..fa3e48e 100644 --- a/src/liblsquic/lsquic_rechist.c +++ b/src/liblsquic/lsquic_rechist.c @@ -63,7 +63,7 @@ rechist_free_elem (struct lsquic_rechist *rechist, unsigned idx) static void rechist_dump_elem(struct rechist_elem *el) { - fprintf(stderr,"[%"PRIu64"-%"PRIu64"]", RE_HIGH(el), el->re_low); + fprintf(stderr, "[%" PRIu64 "-%" PRIu64 "]", RE_HIGH(el), el->re_low); } #ifdef __GNUC__ @@ -73,7 +73,8 @@ static void rechist_dump(struct lsquic_rechist *rechist) { fprintf(stderr, - "%p: cutoff %"PRIu64" l. acked %"PRIu64" masks %u alloced %u used %u max ranges %u head %u\n", + "%p: cutoff %" PRIu64 " l. acked %" PRIu64 + " masks %u alloced %u used %u max ranges %u head %u\n", rechist, rechist->rh_cutoff, rechist->rh_largest_acked_received, @@ -219,7 +220,7 @@ rechist_alloc_elem (struct lsquic_rechist *rechist) idx = find_free_slot(*mask); *mask |= 1ull << idx; ++rechist->rh_n_used; - /*Note that re_next is invalid at this point, caller must set it */ + /* Note that re_next is invalid at this point, caller must set it */ return idx + i * BITS_PER_MASK; } @@ -265,7 +266,7 @@ rechist_test_sanity (const struct lsquic_rechist *rechist) free(masks); } #define rechist_sanity_check(rechist_) do { \ - rechist_test_sanity(rechist_); \ + rechist_test_sanity(rechist_); \ } while (0) #else #define rechist_sanity_check(rechist) diff --git a/tests/test_rechist.c b/tests/test_rechist.c index abfbf4f..a713f85 100644 --- a/tests/test_rechist.c +++ b/tests/test_rechist.c @@ -195,6 +195,7 @@ test5 (void) lsquic_rechist_cleanup(&rechist); } + /* Regression test for bug where rechist ends up empty (rh_used == 0) * with invalid head entry with a self-referential next, and * lsquic_rechist_received would follow it because it didn't check rh_used.