Fix test when using zlib-ng-compat

Apply a patch from upstream that helps fixing an issue detected while
testing zlib-ng-compat as part of the zlib-ng transition [1].

[1] https://fedoraproject.org/wiki/Changes/ZlibNGTransition
This commit is contained in:
Tulio Magno Quites Machado Filho 2023-12-07 09:14:18 -03:00
parent 7db5fbf89d
commit 4c8daa2985
2 changed files with 115 additions and 1 deletions

108
143.patch Normal file
View File

@ -0,0 +1,108 @@
From 6311624a60bfa7249f13921b9fd8d32d5b9a20f8 Mon Sep 17 00:00:00 2001
From: Tulio Magno Quites Machado Filho <tuliom@redhat.com>
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));
}

View File

@ -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 <tuliom@redhat.com> - 11-11
- Fix test when using zlib-ng
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 11-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild