Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pybase64 for openSUSE:Factory 
checked in at 2026-10-05 16:18:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pybase64 (Old)
 and      /work/SRC/openSUSE:Factory/.python-pybase64.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pybase64"

Mon Oct  5 16:18:29 2026 rev:3 rq:1382543 version:1.5.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pybase64/python-pybase64.changes  
2026-08-09 21:46:53.005893379 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-pybase64.new.3698736/python-pybase64.changes 
    2026-10-05 16:19:04.523398572 +0200
@@ -1,0 +2,10 @@
+Mon Oct  5 06:42:39 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 1.5.1:
+  * Fix a Py_buffer use-after-release in the C extension error
+    paths: the buffer was released before the error message was
+    formatted, so formatting could touch freed memory
+  * Switch to libalternatives where available, keeping
+    update-alternatives on Leap 15
+
+-------------------------------------------------------------------

Old:
----
  pybase64-1.5.0.tar.gz

New:
----
  pybase64-1.5.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pybase64.spec ++++++
--- /var/tmp/diff_new_pack.y37YG5/_old  2026-10-05 16:19:05.573442416 +0200
+++ /var/tmp/diff_new_pack.y37YG5/_new  2026-10-05 16:19:05.576442541 +0200
@@ -16,9 +16,14 @@
 #
 
 
+%if 0%{?suse_version} > 1500
+%bcond_without libalternatives
+%else
+%bcond_with libalternatives
+%endif
 %{?sle15_python_module_pythons}
 Name:           python-pybase64
-Version:        1.5.0
+Version:        1.5.1
 Release:        0
 Summary:        Fast Base64 encoding/decoding
 License:        BSD-2-Clause
@@ -36,8 +41,13 @@
 BuildRequires:  fdupes
 BuildRequires:  gcc
 BuildRequires:  python-rpm-macros
+%if %{with libalternatives}
+BuildRequires:  alts
+Requires:       alts
+%else
 Requires(post): update-alternatives
 Requires(postun): update-alternatives
+%endif
 %python_subpackages
 
 %description
@@ -61,9 +71,9 @@
 # The PyPI sdist ships tests/ but omits the tests/utils.py helper, which lives
 # only in the git tree, so tests/test_pybase64.py and tests/test_benchmark.py
 # cannot even be imported - both start with "from . import utils".
-# test_main.py and test_packaging.py are self-contained and do run; test_sbom
-# is deselected because it asserts a CycloneDX SBOM that only the official
-# PyPI wheels carry.
+# test_main.py and test_packaging.py are self-contained and do run;
+# tests/test_packaging.py::test_sbom is deselected because it asserts a
+# CycloneDX SBOM that only the official PyPI wheels carry.
 %pytest_arch tests/test_main.py tests/test_packaging.py -m "not 
pypi_distribution"
 # The functional test module is the one that cannot run, so also exercise the
 # built C extension with a round trip.
@@ -75,6 +85,9 @@
 %postun
 %python_uninstall_alternative pybase64
 
+%pre
+%python_libalternatives_reset_alternative pybase64
+
 %files %{python_files}
 %license LICENSE
 %doc README.rst

++++++ pybase64-1.5.0.tar.gz -> pybase64-1.5.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pybase64-1.5.0/PKG-INFO new/pybase64-1.5.1/PKG-INFO
--- old/pybase64-1.5.0/PKG-INFO 2026-08-08 12:51:25.816278700 +0200
+++ new/pybase64-1.5.1/PKG-INFO 2026-10-04 14:21:39.935015000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: pybase64
-Version: 1.5.0
+Version: 1.5.1
 Summary: Fast Base64 encoding/decoding
 Author: Matthieu Darbois
 License-Expression: BSD-2-Clause
@@ -117,66 +117,66 @@
 
 .. begin benchmark
 
-Running Python 3.15.0rc1, Apple clang version 21.0.0 (clang-2100.1.1.101), 
macOS 26.5.2, Apple M1 Max
+Running Python 3.15.0rc3, Apple clang version 21.0.0 (clang-2100.3.34.2), 
macOS 26.6.2, Apple M1 Max
 
 .. code::
 
-    pybase64 1.5.0 (C extension active - NEON)
+    pybase64 1.5.1 (C extension active - NEON)
     bench: altchars=None, validate=True, padded=True
-    pybase64.encodebytes:     6595 MB/s (135,696 bytes -> 183,309 bytes)
-    pybase64.b64encode:      17492 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       9037 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.encodebytes:       2386 MB/s (135,696 bytes -> 183,309 bytes)
-    base64.b64encode:         2653 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         2656 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.encodebytes:     6577 MB/s (135,696 bytes -> 183,309 bytes)
+    pybase64.b64encode:      17614 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       8975 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.encodebytes:       2342 MB/s (135,696 bytes -> 183,309 bytes)
+    base64.b64encode:         2640 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         2594 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=None, validate=True, padded=False
-    pybase64.b64encode:      17547 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       2521 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64encode:         2656 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         2655 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64encode:      17525 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       2475 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64encode:         2665 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         2604 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=None, ignorechars=b'', padded=False
-    pybase64.b64decode:       2510 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64decode:         2655 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2491 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64decode:         2642 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=None, ignorechars=b'\n', padded=True
-    pybase64.b64decode:       2370 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         2087 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2364 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         2083 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=None, ignorechars=b'\n', padded=False
-    pybase64.b64decode:       2365 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1964 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2358 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1945 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=None, validate=False, padded=True
-    pybase64.b64decode:       2369 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         2030 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2365 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         2033 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=None, validate=False, padded=False
-    pybase64.b64decode:       2361 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1982 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2362 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1965 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=True, padded=True
-    pybase64.b64encode:      10900 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       5974 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64encode:         2675 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         1186 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64encode:      10779 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       6007 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64encode:         2659 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         1195 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=True, padded=False
-    pybase64.b64encode:      10798 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       2135 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64encode:         2571 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         1154 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64encode:      10692 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       2194 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64encode:         2658 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         1196 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'', padded=True
-    pybase64.b64decode:       5770 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64decode:         2629 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64decode:       5952 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64decode:         2631 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'', padded=False
-    pybase64.b64decode:       2201 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64decode:         2606 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2183 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64decode:         2595 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'\n', padded=True
-    pybase64.b64decode:       2058 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         2069 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2054 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         2060 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'\n', padded=False
-    pybase64.b64decode:       2058 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1882 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2069 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1937 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=False, padded=True
-    pybase64.b64decode:       2030 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1005 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2073 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1055 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=False, padded=False
-    pybase64.b64decode:       2081 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1031 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2084 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1038 MB/s (183,308 bytes -> 135,696 bytes)
 
 .. end benchmark
 
@@ -184,8 +184,12 @@
 
 Changelog
 =========
+1.5.1
+-----
+- Fix a Py_buffer Use-After-Release in error paths
+
 1.5.0
-------
+-----
 - Speed-up translation on aarch64
 - Fix invalid data successfully decoded when using altchars (slice ends with 
padding)
 - Fix thread safety selecting codec
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pybase64-1.5.0/README.rst 
new/pybase64-1.5.1/README.rst
--- old/pybase64-1.5.0/README.rst       2026-08-08 12:51:23.000000000 +0200
+++ new/pybase64-1.5.1/README.rst       2026-10-04 14:21:37.055001300 +0200
@@ -87,66 +87,66 @@
 
 .. begin benchmark
 
-Running Python 3.15.0rc1, Apple clang version 21.0.0 (clang-2100.1.1.101), 
macOS 26.5.2, Apple M1 Max
+Running Python 3.15.0rc3, Apple clang version 21.0.0 (clang-2100.3.34.2), 
macOS 26.6.2, Apple M1 Max
 
 .. code::
 
-    pybase64 1.5.0 (C extension active - NEON)
+    pybase64 1.5.1 (C extension active - NEON)
     bench: altchars=None, validate=True, padded=True
-    pybase64.encodebytes:     6595 MB/s (135,696 bytes -> 183,309 bytes)
-    pybase64.b64encode:      17492 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       9037 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.encodebytes:       2386 MB/s (135,696 bytes -> 183,309 bytes)
-    base64.b64encode:         2653 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         2656 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.encodebytes:     6577 MB/s (135,696 bytes -> 183,309 bytes)
+    pybase64.b64encode:      17614 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       8975 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.encodebytes:       2342 MB/s (135,696 bytes -> 183,309 bytes)
+    base64.b64encode:         2640 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         2594 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=None, validate=True, padded=False
-    pybase64.b64encode:      17547 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       2521 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64encode:         2656 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         2655 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64encode:      17525 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       2475 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64encode:         2665 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         2604 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=None, ignorechars=b'', padded=False
-    pybase64.b64decode:       2510 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64decode:         2655 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2491 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64decode:         2642 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=None, ignorechars=b'\n', padded=True
-    pybase64.b64decode:       2370 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         2087 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2364 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         2083 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=None, ignorechars=b'\n', padded=False
-    pybase64.b64decode:       2365 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1964 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2358 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1945 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=None, validate=False, padded=True
-    pybase64.b64decode:       2369 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         2030 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2365 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         2033 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=None, validate=False, padded=False
-    pybase64.b64decode:       2361 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1982 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2362 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1965 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=True, padded=True
-    pybase64.b64encode:      10900 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       5974 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64encode:         2675 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         1186 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64encode:      10779 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       6007 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64encode:         2659 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         1195 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=True, padded=False
-    pybase64.b64encode:      10798 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       2135 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64encode:         2571 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         1154 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64encode:      10692 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       2194 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64encode:         2658 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         1196 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'', padded=True
-    pybase64.b64decode:       5770 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64decode:         2629 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64decode:       5952 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64decode:         2631 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'', padded=False
-    pybase64.b64decode:       2201 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64decode:         2606 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2183 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64decode:         2595 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'\n', padded=True
-    pybase64.b64decode:       2058 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         2069 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2054 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         2060 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'\n', padded=False
-    pybase64.b64decode:       2058 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1882 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2069 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1937 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=False, padded=True
-    pybase64.b64decode:       2030 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1005 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2073 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1055 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=False, padded=False
-    pybase64.b64decode:       2081 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1031 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2084 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1038 MB/s (183,308 bytes -> 135,696 bytes)
 
 .. end benchmark
 
@@ -154,8 +154,12 @@
 
 Changelog
 =========
+1.5.1
+-----
+- Fix a Py_buffer Use-After-Release in error paths
+
 1.5.0
-------
+-----
 - Speed-up translation on aarch64
 - Fix invalid data successfully decoded when using altchars (slice ends with 
padding)
 - Fix thread safety selecting codec
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pybase64-1.5.0/pyproject.toml 
new/pybase64-1.5.1/pyproject.toml
--- old/pybase64-1.5.0/pyproject.toml   2026-08-08 12:51:23.000000000 +0200
+++ new/pybase64-1.5.1/pyproject.toml   2026-10-04 14:21:37.055513400 +0200
@@ -70,7 +70,6 @@
     {include-group = "test"},
     "coverage[toml]>=7.10",  # >= 7.10, we use tool.coverage.run.patch config
     "gcovr>=8",
-    "lxml>=7.0.0a3 ; python_version >= '3.15'",
     "pytest-cov>=7",  # needed for coverage>=7.10
 ]
 # we don't support docs for python<3.12
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pybase64-1.5.0/src/pybase64/_pybase64.c 
new/pybase64-1.5.1/src/pybase64/_pybase64.c
--- old/pybase64-1.5.0/src/pybase64/_pybase64.c 2026-08-08 12:51:23.000000000 
+0200
+++ new/pybase64-1.5.1/src/pybase64/_pybase64.c 2026-10-04 14:21:37.056132800 
+0200
@@ -59,20 +59,20 @@
 #if defined(PYPY_VERSION)
     /* PyPy does not respect PyBUF_C_CONTIGUOUS */
     if (!PyBuffer_IsContiguous(buffer, 'C')) {
-        PyBuffer_Release(buffer);
         PyErr_Format(PyExc_BufferError, "%R: underlying buffer is not 
C-contiguous", Py_TYPE(object));
+        PyBuffer_Release(buffer);
         return -1;
     }
 #endif
     if (bytes_like) {
         if (((buffer->format[0] != 'c') && (buffer->format[0] != 'b') && 
(buffer->format[0] != 'B')) || buffer->format[1] != '\0' ) {
-            PyBuffer_Release(buffer);
             PyErr_Format(PyExc_TypeError, "expected single byte elements, not 
'%s' from %R", buffer->format, Py_TYPE(object));
+            PyBuffer_Release(buffer);
             return -1;
         }
         if (buffer->ndim != 1) {
-            PyBuffer_Release(buffer);
             PyErr_Format(PyExc_TypeError, "expected 1-D data, not %d-D data 
from %R", buffer->ndim, Py_TYPE(object));
+            PyBuffer_Release(buffer);
             return -1;
         }
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pybase64-1.5.0/src/pybase64/_version.py 
new/pybase64-1.5.1/src/pybase64/_version.py
--- old/pybase64-1.5.0/src/pybase64/_version.py 2026-08-08 12:51:23.000000000 
+0200
+++ new/pybase64-1.5.1/src/pybase64/_version.py 2026-10-04 14:21:37.056132800 
+0200
@@ -1,3 +1,3 @@
 from __future__ import annotations
 
-_version = "1.5.0"
+_version = "1.5.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pybase64-1.5.0/src/pybase64.egg-info/PKG-INFO 
new/pybase64-1.5.1/src/pybase64.egg-info/PKG-INFO
--- old/pybase64-1.5.0/src/pybase64.egg-info/PKG-INFO   2026-08-08 
12:51:25.000000000 +0200
+++ new/pybase64-1.5.1/src/pybase64.egg-info/PKG-INFO   2026-10-04 
14:21:39.916967600 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: pybase64
-Version: 1.5.0
+Version: 1.5.1
 Summary: Fast Base64 encoding/decoding
 Author: Matthieu Darbois
 License-Expression: BSD-2-Clause
@@ -117,66 +117,66 @@
 
 .. begin benchmark
 
-Running Python 3.15.0rc1, Apple clang version 21.0.0 (clang-2100.1.1.101), 
macOS 26.5.2, Apple M1 Max
+Running Python 3.15.0rc3, Apple clang version 21.0.0 (clang-2100.3.34.2), 
macOS 26.6.2, Apple M1 Max
 
 .. code::
 
-    pybase64 1.5.0 (C extension active - NEON)
+    pybase64 1.5.1 (C extension active - NEON)
     bench: altchars=None, validate=True, padded=True
-    pybase64.encodebytes:     6595 MB/s (135,696 bytes -> 183,309 bytes)
-    pybase64.b64encode:      17492 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       9037 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.encodebytes:       2386 MB/s (135,696 bytes -> 183,309 bytes)
-    base64.b64encode:         2653 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         2656 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.encodebytes:     6577 MB/s (135,696 bytes -> 183,309 bytes)
+    pybase64.b64encode:      17614 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       8975 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.encodebytes:       2342 MB/s (135,696 bytes -> 183,309 bytes)
+    base64.b64encode:         2640 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         2594 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=None, validate=True, padded=False
-    pybase64.b64encode:      17547 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       2521 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64encode:         2656 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         2655 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64encode:      17525 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       2475 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64encode:         2665 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         2604 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=None, ignorechars=b'', padded=False
-    pybase64.b64decode:       2510 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64decode:         2655 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2491 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64decode:         2642 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=None, ignorechars=b'\n', padded=True
-    pybase64.b64decode:       2370 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         2087 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2364 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         2083 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=None, ignorechars=b'\n', padded=False
-    pybase64.b64decode:       2365 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1964 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2358 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1945 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=None, validate=False, padded=True
-    pybase64.b64decode:       2369 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         2030 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2365 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         2033 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=None, validate=False, padded=False
-    pybase64.b64decode:       2361 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1982 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2362 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1965 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=True, padded=True
-    pybase64.b64encode:      10900 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       5974 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64encode:         2675 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         1186 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64encode:      10779 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       6007 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64encode:         2659 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         1195 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=True, padded=False
-    pybase64.b64encode:      10798 MB/s (135,696 bytes -> 180,928 bytes)
-    pybase64.b64decode:       2135 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64encode:         2571 MB/s (135,696 bytes -> 180,928 bytes)
-    base64.b64decode:         1154 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64encode:      10692 MB/s (135,696 bytes -> 180,928 bytes)
+    pybase64.b64decode:       2194 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64encode:         2658 MB/s (135,696 bytes -> 180,928 bytes)
+    base64.b64decode:         1196 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'', padded=True
-    pybase64.b64decode:       5770 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64decode:         2629 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64decode:       5952 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64decode:         2631 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'', padded=False
-    pybase64.b64decode:       2201 MB/s (180,928 bytes -> 135,696 bytes)
-    base64.b64decode:         2606 MB/s (180,928 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2183 MB/s (180,928 bytes -> 135,696 bytes)
+    base64.b64decode:         2595 MB/s (180,928 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'\n', padded=True
-    pybase64.b64decode:       2058 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         2069 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2054 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         2060 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', ignorechars=b'\n', padded=False
-    pybase64.b64decode:       2058 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1882 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2069 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1937 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=False, padded=True
-    pybase64.b64decode:       2030 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1005 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2073 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1055 MB/s (183,308 bytes -> 135,696 bytes)
     bench: altchars=b'-_', validate=False, padded=False
-    pybase64.b64decode:       2081 MB/s (183,308 bytes -> 135,696 bytes)
-    base64.b64decode:         1031 MB/s (183,308 bytes -> 135,696 bytes)
+    pybase64.b64decode:       2084 MB/s (183,308 bytes -> 135,696 bytes)
+    base64.b64decode:         1038 MB/s (183,308 bytes -> 135,696 bytes)
 
 .. end benchmark
 
@@ -184,8 +184,12 @@
 
 Changelog
 =========
+1.5.1
+-----
+- Fix a Py_buffer Use-After-Release in error paths
+
 1.5.0
-------
+-----
 - Speed-up translation on aarch64
 - Fix invalid data successfully decoded when using altchars (slice ends with 
padding)
 - Fix thread safety selecting codec

Reply via email to