diff --git a/143.patch b/143.patch new file mode 100644 index 0000000..846e2ff --- /dev/null +++ b/143.patch @@ -0,0 +1,108 @@ +From 6311624a60bfa7249f13921b9fd8d32d5b9a20f8 Mon Sep 17 00:00:00 2001 +From: Tulio Magno Quites Machado Filho +Date: Wed, 6 Dec 2023 19:12:13 -0300 +Subject: [PATCH] Adapt alg_comp test to different zlib (#142) + +Different zlib implementations such as zlib-ng, QATzip and libnxz +provide API and ABI compatibility with madler's zlib. However, they do +not guarantee identical output. +This makes it very hard to compare the length or binary output of a +compressed stream. + +Instead of doing that, this patch aims to compare the input against the +output of a compression and decompression cycle. + +Fixes #142. +--- + tests/alg_comp.c | 55 ++++++++++++++++++++++++++++-------------------- + 1 file changed, 32 insertions(+), 23 deletions(-) + +diff --git a/tests/alg_comp.c b/tests/alg_comp.c +index c9bef752..fcd305c1 100644 +--- a/tests/alg_comp.c ++++ b/tests/alg_comp.c +@@ -41,22 +41,23 @@ const struct { + {} + }; + +-typedef typeof(((jose_hook_alg_t *) NULL)->comp.inf) comp_func_t; +- + static void +-test(const jose_hook_alg_t *a, comp_func_t func, bool iter, +- const uint8_t *i, size_t il, +- const uint8_t *o, size_t ol) ++test(const jose_hook_alg_t *a, bool iter, ++ const uint8_t *i, size_t il) + { + jose_io_auto_t *b = NULL; ++ jose_io_auto_t *c = NULL; + jose_io_auto_t *z = NULL; +- void *buf = NULL; +- size_t len = 0; ++ void *buf1 = NULL; ++ void *buf2 = NULL; ++ size_t blen = 0; ++ size_t clen = 0; + +- b = jose_io_malloc(NULL, &buf, &len); ++ /* Test compression first. */ ++ b = jose_io_malloc(NULL, &buf1, &blen); + assert(b); + +- z = func(a, NULL, b); ++ z = a->comp.def(a, NULL, b); + assert(z); + + if (iter) { +@@ -68,8 +69,26 @@ test(const jose_hook_alg_t *a, comp_func_t func, bool iter, + + assert(z->done(z)); + +- assert(len == ol); +- assert(memcmp(buf, o, ol) == 0); ++ /* Test decompression now. */ ++ c = jose_io_malloc(NULL, &buf2, &clen); ++ assert(b); ++ ++ z = a->comp.inf(a, NULL, c); ++ assert(z); ++ ++ if (iter) { ++ uint8_t *m = buf1; ++ for (size_t j = 0; j < blen; j++) ++ assert(z->feed(z, &m[j], 1)); ++ } else { ++ assert(z->feed(z, buf1, blen)); ++ } ++ ++ assert(z->done(z)); ++ ++ /* Compare the final output with the original input. */ ++ assert(clen == il); ++ assert(memcmp(buf2, i, il) == 0); + } + + int +@@ -93,20 +112,10 @@ main(int argc, char *argv[]) + assert(jose_b64_dec_buf(tests[i].def, strlen(tests[i].def), + tst_def, sizeof(tst_def)) == sizeof(tst_def)); + +- test(a, a->comp.def, false, +- tst_inf, sizeof(tst_inf), +- tst_def, sizeof(tst_def)); +- +- test(a, a->comp.inf, false, +- tst_def, sizeof(tst_def), ++ test(a, false, + tst_inf, sizeof(tst_inf)); + +- test(a, a->comp.def, true, +- tst_inf, sizeof(tst_inf), +- tst_def, sizeof(tst_def)); +- +- test(a, a->comp.inf, true, +- tst_def, sizeof(tst_def), ++ test(a, true, + tst_inf, sizeof(tst_inf)); + } + diff --git a/jose.spec b/jose.spec index 30a28d7..d1b6146 100644 --- a/jose.spec +++ b/jose.spec @@ -1,12 +1,15 @@ Name: jose Version: 11 -Release: 10%{?dist} +Release: 11%{?dist} Summary: Tools for JSON Object Signing and Encryption (JOSE) License: Apache-2.0 URL: https://github.com/latchset/%{name} Source0: https://github.com/latchset/%{name}/releases/download/v%{version}/%{name}-%{version}.tar.xz +# Backport from https://github.com/latchset/jose/pull/143 +Patch: 143.patch + BuildRequires: gcc BuildRequires: pkgconfig BuildRequires: jansson-devel >= 2.10 @@ -81,6 +84,9 @@ rm -rf %{buildroot}/%{_libdir}/lib%{name}.la %{_mandir}/man3/jose*.3* %changelog +* Tue Jan 30 2024 Tulio Magno Quites Machado Filho - 11-11 +- Fix test when using zlib-ng + * Wed Jan 24 2024 Fedora Release Engineering - 11-10 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild