Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-zlib-ng for openSUSE:Factory checked in at 2026-09-11 18:03:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-zlib-ng (Old) and /work/SRC/openSUSE:Factory/.python-zlib-ng.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-zlib-ng" Fri Sep 11 18:03:07 2026 rev:5 rq:1377035 version:1.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-zlib-ng/python-zlib-ng.changes 2026-03-27 06:49:26.841823429 +0100 +++ /work/SRC/openSUSE:Factory/.python-zlib-ng.new.1265/python-zlib-ng.changes 2026-09-11 18:06:48.685588932 +0200 @@ -1,0 +2,6 @@ +Fri Sep 11 04:26:57 UTC 2026 - Steve Kowalik <[email protected]> + +- Add patch support-python-315.patch: + * Do not crash during copy() on a flushed compress object. + +------------------------------------------------------------------- New: ---- support-python-315.patch ----------(New B)---------- New: - Add patch support-python-315.patch: * Do not crash during copy() on a flushed compress object. ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-zlib-ng.spec ++++++ --- /var/tmp/diff_new_pack.5iatkD/_old 2026-09-11 18:06:49.544625011 +0200 +++ /var/tmp/diff_new_pack.5iatkD/_new 2026-09-11 18:06:49.546625095 +0200 @@ -31,9 +31,10 @@ Release: 0 License: Python-2.0 Summary: Faster zlib and gzip compatible compression and decompression -Group: Development/Languages/Python URL: https://github.com/pycompression/python-zlib-ng Source0: https://files.pythonhosted.org/packages/source/z/zlib-ng/zlib_ng-%{version}.tar.gz +# PATCH-FIX-UPSTREAM Based on gh#pycompression/python-zlib-ng#80 +Patch0: support-python-315.patch BuildRequires: %{python_module devel >= 3.9} BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools >= 77} @@ -56,7 +57,7 @@ This package provides Python bindings for the zlib-ng library. %prep -%setup -q -n zlib_ng-%{version} +%autosetup -p1 -n zlib_ng-%{version} %build %if !%{with test} ++++++ support-python-315.patch ++++++ >From 31a11a4b936f9ad8fae5150fea67513e9302aa1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= <[email protected]> Date: Tue, 30 Jun 2026 15:51:19 -0600 Subject: [PATCH 1/5] Fix a crash when calling `copy()` on a flushed compress object on Python 3.15 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Edgar Ramírez Mondragón <[email protected]> --- CHANGELOG.rst | 5 +++++ src/zlib_ng/zlib_ngmodule.c | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) Index: zlib_ng-1.0.0/src/zlib_ng/zlib_ngmodule.c =================================================================== --- zlib_ng-1.0.0.orig/src/zlib_ng/zlib_ngmodule.c +++ zlib_ng-1.0.0/src/zlib_ng/zlib_ngmodule.c @@ -801,7 +801,8 @@ zlib_Compress_copy(compobject *self, PyO if (!self->is_initialised) { PyErr_SetString(PyExc_ValueError, "Cannot copy flushed objects."); - goto error; + Py_DECREF(return_value); + return NULL; } /* Copy the zstream state Index: zlib_ng-1.0.0/tests/test_compat.py =================================================================== --- zlib_ng-1.0.0.orig/tests/test_compat.py +++ zlib_ng-1.0.0/tests/test_compat.py @@ -64,21 +64,21 @@ def limited_zlib_tests(strategies=ZLIB_S @pytest.mark.parametrize(["data_size", "value"], - itertools.product(DATA_SIZES, SEEDS)) + list(itertools.product(DATA_SIZES, SEEDS))) def test_crc32(data_size, value): data = DATA[:data_size] assert zlib.crc32(data, value) == zlib_ng.crc32(data, value) @pytest.mark.parametrize(["data_size", "value"], - itertools.product(DATA_SIZES, SEEDS)) + list(itertools.product(DATA_SIZES, SEEDS))) def test_adler32(data_size, value): data = DATA[:data_size] assert zlib.adler32(data, value) == zlib_ng.adler32(data, value) @pytest.mark.parametrize(["data_size", "level", "wbits"], - itertools.product(DATA_SIZES, range(10), WBITS_RANGE)) + list(itertools.product(DATA_SIZES, range(10), WBITS_RANGE))) def test_compress(data_size, level, wbits): data = DATA[:data_size] compressed = zlib_ng.compress(data, level=level, wbits=wbits) @@ -87,7 +87,7 @@ def test_compress(data_size, level, wbit @pytest.mark.parametrize(["data_size", "level"], - itertools.product(DATA_SIZES, range(10))) + list(itertools.product(DATA_SIZES, range(10)))) def test_decompress_zlib(data_size, level): data = DATA[:data_size] compressed = zlib.compress(data, level=level) @@ -96,7 +96,7 @@ def test_decompress_zlib(data_size, leve @pytest.mark.parametrize(["data_size", "level", "wbits", "memLevel", "strategy"], - limited_zlib_tests(ZLIB_STRATEGIES)) + list(limited_zlib_tests(ZLIB_STRATEGIES))) def test_decompress_wbits(data_size, level, wbits, memLevel, strategy): data = DATA[:data_size] compressobj = zlib.compressobj(level=level, wbits=wbits, memLevel=memLevel, @@ -107,7 +107,7 @@ def test_decompress_wbits(data_size, lev @pytest.mark.parametrize(["data_size", "level", "wbits"], - itertools.product([128 * 1024], range(10), WBITS_RANGE),) + list(itertools.product([128 * 1024], range(10), WBITS_RANGE),)) def test_decompress_zlib_ng(data_size, level, wbits): data = DATA[:data_size] compressed = zlib_ng.compress(data, level=level, wbits=wbits) @@ -116,7 +116,7 @@ def test_decompress_zlib_ng(data_size, l @pytest.mark.parametrize(["data_size", "level", "wbits", "memLevel", "strategy"], - limited_zlib_tests(ZLIBNG_STRATEGIES)) + list(limited_zlib_tests(ZLIBNG_STRATEGIES))) def test_compress_compressobj(data_size, level, wbits, memLevel, strategy): data = DATA[:data_size] compressobj = zlib_ng.compressobj(level=level, @@ -129,7 +129,7 @@ def test_compress_compressobj(data_size, @pytest.mark.parametrize(["data_size", "level", "wbits", "memLevel", "strategy"], - limited_zlib_tests(ZLIB_STRATEGIES)) + list(limited_zlib_tests(ZLIB_STRATEGIES))) def test_decompress_decompressobj(data_size, level, wbits, memLevel, strategy): data = DATA[:data_size] compressobj = zlib.compressobj(level=level, wbits=wbits, memLevel=memLevel, @@ -151,7 +151,7 @@ def test_decompressobj_unconsumed_tail() @pytest.mark.parametrize(["data_size", "level"], - itertools.product(DATA_SIZES, range(10))) + list(itertools.product(DATA_SIZES, range(10)))) def test_gzip_ng_compress(data_size, level): data = DATA[:data_size] compressed = gzip_ng.compress(data, compresslevel=level) @@ -159,7 +159,7 @@ def test_gzip_ng_compress(data_size, lev @pytest.mark.parametrize(["data_size", "level"], - itertools.product(DATA_SIZES, range(10))) + list(itertools.product(DATA_SIZES, range(10)))) def test_decompress_gzip(data_size, level): data = DATA[:data_size] compressed = gzip.compress(data, compresslevel=level) @@ -168,7 +168,7 @@ def test_decompress_gzip(data_size, leve @pytest.mark.parametrize(["data_size", "level"], - itertools.product(DATA_SIZES, range(10))) + list(itertools.product(DATA_SIZES, range(10)))) def test_decompress_gzip_ng(data_size, level): data = DATA[:data_size] compressed = gzip_ng.compress(data, compresslevel=level) @@ -177,7 +177,7 @@ def test_decompress_gzip_ng(data_size, l @pytest.mark.parametrize(["unused_size", "wbits"], - itertools.product([26], [-15, 15, 31])) + list(itertools.product([26], [-15, 15, 31]))) def test_unused_data(unused_size, wbits): unused_data = b"abcdefghijklmnopqrstuvwxyz"[:unused_size] compressor = zlib.compressobj(wbits=wbits) Index: zlib_ng-1.0.0/tests/test_gzip_ng.py =================================================================== --- zlib_ng-1.0.0.orig/tests/test_gzip_ng.py +++ zlib_ng-1.0.0/tests/test_gzip_ng.py @@ -65,7 +65,7 @@ def test_GzipNGFile_read_truncated(): "reached") [email protected]("level", range(1, 10)) [email protected]("level", list(range(1, 10))) def test_decompress_stdin_stdout(capsysbinary, level): """Test if the command line can decompress data that has been compressed by gzip at all levels.""" Index: zlib_ng-1.0.0/tests/test_gzip_ng_threaded.py =================================================================== --- zlib_ng-1.0.0.orig/tests/test_gzip_ng_threaded.py +++ zlib_ng-1.0.0/tests/test_gzip_ng_threaded.py @@ -31,7 +31,7 @@ def test_threaded_read(): @pytest.mark.parametrize(["mode", "threads"], - itertools.product(["wb", "wt"], [1, 3, -1])) + list(itertools.product(["wb", "wt"], [1, 3, -1]))) def test_threaded_write(mode, threads): with tempfile.NamedTemporaryFile("wb", delete=False) as tmp: # Use a small block size to simulate many writes. @@ -216,7 +216,7 @@ def test_threaded_writer_does_not_close_ @pytest.mark.timeout(5) @pytest.mark.parametrize( - ["mode", "threads"], itertools.product(["rb", "wb"], [1, 2])) + ["mode", "threads"], list(itertools.product(["rb", "wb"], [1, 2]))) def test_threaded_program_can_exit_on_error(tmp_path, mode, threads): program = tmp_path / "no_context_manager.py" test_file = tmp_path / "output.gz"
