Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-mmh3 for openSUSE:Factory 
checked in at 2026-10-26 10:05:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-mmh3 (Old)
 and      /work/SRC/openSUSE:Factory/.python-mmh3.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-mmh3"

Mon Oct 26 10:05:02 2026 rev:5 rq:1392639 version:5.3.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-mmh3/python-mmh3.changes  2026-03-12 
22:26:30.836722954 +0100
+++ /work/SRC/openSUSE:Factory/.python-mmh3.new.2252680/python-mmh3.changes     
2026-10-26 10:06:29.409036719 +0100
@@ -1,0 +2,8 @@
+Mon Oct 26 07:45:16 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 5.3.1:
+  * Add support for Python 3.15 (#192).
+  * Fix undefined behavior when writing to const-qualified
+    128-bit digest buffers
+
+-------------------------------------------------------------------

Old:
----
  mmh3-5.2.1.tar.gz

New:
----
  mmh3-5.3.1.tar.gz

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

Other differences:
------------------
++++++ python-mmh3.spec ++++++
--- /var/tmp/diff_new_pack.KECkJ4/_old  2026-10-26 10:06:30.793094765 +0100
+++ /var/tmp/diff_new_pack.KECkJ4/_new  2026-10-26 10:06:30.797094933 +0100
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-mmh3
-Version:        5.2.1
+Version:        5.3.1
 Release:        0
 Summary:        Python extension for MurmurHash (MurmurHash3)
 License:        MIT

++++++ mmh3-5.2.1.tar.gz -> mmh3-5.3.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/.github/actionlint.yml 
new/mmh3-5.3.1/.github/actionlint.yml
--- old/mmh3-5.2.1/.github/actionlint.yml       2026-03-05 16:11:36.000000000 
+0100
+++ new/mmh3-5.3.1/.github/actionlint.yml       2026-09-30 18:40:47.000000000 
+0200
@@ -1,6 +1,6 @@
-# As of March 5, 2026, actionlint via super-linter 8.5.0 does not support 
macOS 26, so we ignore the runner-label warning for now.
+# As of August 26, 2026, Actionlint via Super-Linter does not support Ubuntu
+# 26.04, so we ignore this runner-label warning for now.
 paths:
   .github/workflows/**/*.{yml,yaml}:
     ignore:
-      - 'label "macos-26" is unknown.+'
-      - 'label "macos-26-intel" is unknown.+'
+      - 'label "ubuntu-26.04" is unknown.+'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/.github/dependabot.yml 
new/mmh3-5.3.1/.github/dependabot.yml
--- old/mmh3-5.2.1/.github/dependabot.yml       2026-03-05 16:11:36.000000000 
+0100
+++ new/mmh3-5.3.1/.github/dependabot.yml       2026-09-30 18:40:47.000000000 
+0200
@@ -12,6 +12,8 @@
           - "*"
     cooldown:
       default-days: 7
+    commit-message:
+      prefix: "chore(ci)"
   - package-ecosystem: "pip"
     directory: "/"
     schedule:
@@ -24,3 +26,6 @@
           - "*"
     cooldown:
       default-days: 7
+    commit-message:
+      prefix: "chore"
+      include: "scope"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/benchmark-base-hash.yml 
new/mmh3-5.3.1/.github/workflows/benchmark-base-hash.yml
--- old/mmh3-5.2.1/.github/workflows/benchmark-base-hash.yml    2026-03-05 
16:11:36.000000000 +0100
+++ new/mmh3-5.3.1/.github/workflows/benchmark-base-hash.yml    2026-09-30 
18:40:47.000000000 +0200
@@ -11,16 +11,16 @@
     permissions:
       contents: read
       packages: read
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     env:
       BENCHMARK_MAX_SIZE: 65536
     steps:
       - name: Checkout
-        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
         with:
           persist-credentials: false
       - name: Set up Python
-        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 
v6.2.0
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
         with:
           python-version: "3.14"
       - name: Install dependencies
@@ -87,7 +87,7 @@
           sudo systemctl restart irqbalance
           systemctl status irqbalance
       - name: Upload artifacts
-        uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f 
# v7.0.0
+        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 
# v7.0.1
         with:
           name: benchmark-results
           path: var
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/benchmark.yml 
new/mmh3-5.3.1/.github/workflows/benchmark.yml
--- old/mmh3-5.2.1/.github/workflows/benchmark.yml      2026-03-05 
16:11:36.000000000 +0100
+++ new/mmh3-5.3.1/.github/workflows/benchmark.yml      2026-09-30 
18:40:47.000000000 +0200
@@ -11,16 +11,16 @@
     permissions:
       contents: read
       packages: read
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     env:
       BENCHMARK_MAX_SIZE: 262144
     steps:
       - name: Checkout
-        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
         with:
           persist-credentials: false
       - name: Set up Python
-        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 
v6.2.0
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
         with:
           python-version: "3.14"
       - name: Install dependencies
@@ -82,7 +82,7 @@
           sudo systemctl restart irqbalance
           systemctl status irqbalance
       - name: Upload artifacts
-        uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f 
# v7.0.0
+        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 
# v7.0.1
         with:
           name: benchmark-results
           path: var
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/build.yml 
new/mmh3-5.3.1/.github/workflows/build.yml
--- old/mmh3-5.2.1/.github/workflows/build.yml  2026-03-05 16:11:36.000000000 
+0100
+++ new/mmh3-5.3.1/.github/workflows/build.yml  2026-09-30 18:40:47.000000000 
+0200
@@ -22,17 +22,27 @@
 
     strategy:
       matrix:
-        os: [macos-26, windows-2025, ubuntu-24.04]
-        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.14t"]
+        os: [macos-26, windows-2025, ubuntu-26.04]
+        python-version:
+          [
+            "3.10",
+            "3.11",
+            "3.12",
+            "3.13",
+            "3.14",
+            "3.14t",
+            "3.15-dev",
+            "3.15t-dev",
+          ]
 
     runs-on: ${{ matrix.os }}
     steps:
       - name: Checkout
-        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
         with:
           persist-credentials: false
       - name: Set up Python ${{ matrix.python-version }}
-        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 
v6.2.0
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
         with:
           python-version: ${{ matrix.python-version }}
       - name: Install dependencies
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/draft-pdf.yml 
new/mmh3-5.3.1/.github/workflows/draft-pdf.yml
--- old/mmh3-5.2.1/.github/workflows/draft-pdf.yml      2026-03-05 
16:11:36.000000000 +0100
+++ new/mmh3-5.3.1/.github/workflows/draft-pdf.yml      2026-09-30 
18:40:47.000000000 +0200
@@ -21,7 +21,7 @@
     if: github.event_name == 'workflow_dispatch' && github.ref == 
'refs/heads/master'
     steps:
       - name: Checkout
-        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
         with:
           persist-credentials: false
       - name: Build draft PDF
@@ -31,7 +31,7 @@
           # This should be the path to the paper within your repo.
           paper-path: paper/paper.md
       - name: Upload
-        uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f 
# v7.0.0
+        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 
# v7.0.1
         with:
           name: paper
           # This is the output path where Pandoc will write the compiled
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/superlinter.yml 
new/mmh3-5.3.1/.github/workflows/superlinter.yml
--- old/mmh3-5.2.1/.github/workflows/superlinter.yml    2026-03-05 
16:11:36.000000000 +0100
+++ new/mmh3-5.3.1/.github/workflows/superlinter.yml    2026-09-30 
18:40:47.000000000 +0200
@@ -30,7 +30,7 @@
     steps:
       # Checks out a copy of your repository on the ubuntu-latest machine
       - name: Checkout code
-        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
         with:
           persist-credentials: false
           # super-linter needs the full git history to get the
@@ -39,7 +39,7 @@
 
       # Runs the Super-Linter action
       - name: Run Super-Linter
-        uses: 
super-linter/super-linter@61abc07d755095a68f4987d1c2c3d1d64408f1f9 # v8.5.0
+        uses: 
super-linter/super-linter@4ce20838b8ab83717e78138c5b3a1407148e0918 # v8.7.0
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
           LINTER_RULES_PATH: /
@@ -62,7 +62,7 @@
       # super-linter 7 does not honor the ignore-paths option of pylint
       # so we run pylint separately
       - name: Set up Python
-        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 
v6.2.0
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
         with:
           python-version: "3.14"
       - name: Run pylint
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/.github/workflows/wheels.yml 
new/mmh3-5.3.1/.github/workflows/wheels.yml
--- old/mmh3-5.2.1/.github/workflows/wheels.yml 2026-03-05 16:11:36.000000000 
+0100
+++ new/mmh3-5.3.1/.github/workflows/wheels.yml 2026-09-30 18:40:47.000000000 
+0200
@@ -16,14 +16,14 @@
     strategy:
       matrix:
         os: [ubuntu-24.04]
-        archs: [x86_64, i686, aarch64, ppc64le, s390x]
+        archs: [x86_64, i686, aarch64, ppc64le, s390x, riscv64]
         build: [manylinux, musllinux]
         include:
           - os: windows-2025
             archs: AMD64
           - os: windows-2025
             archs: x86
-          - os: windows-2025
+          - os: windows-11-arm
             archs: ARM64
           - os: macos-26-intel
             archs: x86_64
@@ -50,11 +50,11 @@
             archs: x86_64_iphonesimulator
     steps:
       - name: Checkout
-        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
         with:
           persist-credentials: false
       - name: Set up Python
-        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 
v6.2.0
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
         with:
           python-version: "3.14"
       - name: Set dev version for TestPyPI
@@ -78,7 +78,7 @@
           open("pyproject.toml", "w", encoding="utf-8").write(new_text)
       - name: Set up QEMU
         if: runner.os == 'Linux' && matrix.platform != 'android'
-        uses: 
docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0
+        uses: 
docker/setup-qemu-action@1f40c72289eff860ee54a304f1438e3cff362e0a # v4.3.0
       # 
https://github.blog/changelog/2024-04-02-github-actions-hardware-accelerated-android-virtualization-now-available/
       - name: Set up KVM for Android emulation
         if: runner.os == 'Linux' && matrix.platform == 'android'
@@ -87,11 +87,11 @@
           sudo udevadm control --reload-rules
           sudo udevadm trigger --name-match=kvm
       - name: Build wheels
-        uses: pypa/cibuildwheel@ee02a1537ce3071a004a6b08c41e72f0fdc42d9a # 
v3.4.0
+        uses: pypa/cibuildwheel@e090b81e30c4d855ea63bf4b6e59204c09a101ae # 
v4.2.1
         with:
           output-dir: wheelhouse
         env:
-          CIBW_BUILD: "{cp310,cp311,cp312,cp313,cp314,cp314t}-${{ matrix.build 
}}*"
+          CIBW_BUILD: "{cp310,cp311,cp312,cp313,cp314,cp314t,cp315,cp315t}-${{ 
matrix.build }}*"
           CIBW_PLATFORM: ${{ matrix.platform || 'auto' }}
           CIBW_ARCHS: ${{ matrix.archs }}
           CIBW_BUILD_FRONTEND: "build"
@@ -101,21 +101,21 @@
           CIBW_TEST_COMMAND: "pytest {project}"
           CIBW_TEST_COMMAND_ANDROID: "python -m pytest ./tests"
           CIBW_TEST_COMMAND_IOS: "python -m pytest ./tests"
-          CIBW_TEST_SKIP: "*-win_arm64 *-android_arm64_v8a"
-      - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f 
# v7.0.0
+          CIBW_TEST_SKIP: "*-android_arm64_v8a"
+      - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 
# v7.0.1
         with:
           name: Wheel-${{ matrix.os }}-${{ matrix.platform }}-${{ matrix.build 
}}${{ matrix.archs }}
           path: ./wheelhouse/*.whl
   build_sdist:
     name: Build a source distribution
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     steps:
       - name: Checkout
-        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 
v6.0.2
+        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 
v7.0.1
         with:
           persist-credentials: false
       - name: Set up Python
-        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # 
v6.2.0
+        uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
         with:
           python-version: "3.14"
       - name: Set dev version for TestPyPI
@@ -150,14 +150,14 @@
           python -m pip install dist/*.tar.gz
           python -m pytest
           mypy --strict tests
-      - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f 
# v7.0.0
+      - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 
# v7.0.1
         with:
           path: dist/*.tar.gz
   publish-to-pypi:
     name: "Publish artifacts to PyPI"
     if: startsWith(github.ref, 'refs/tags/')
     needs: [build_wheels, build_sdist]
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     environment:
       name: pypi
       url: https://pypi.org/p/mmh3
@@ -165,17 +165,17 @@
       id-token: write # IMPORTANT: this permission is mandatory for trusted 
publishing
     steps:
       - name: Set up built items
-        uses: 
actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
+        uses: 
actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
         with:
           path: dist
           merge-multiple: true
       - name: Publish package distributions to PyPI
-        uses: 
pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
+        uses: 
pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
   publish-to-testpypi:
     name: "Publish artifacts to TestPyPI"
     if: github.event_name == 'workflow_dispatch' && github.ref == 
'refs/heads/master'
     needs: [build_wheels, build_sdist]
-    runs-on: ubuntu-24.04
+    runs-on: ubuntu-26.04
     environment:
       name: testpypi
       url: https://test.pypi.org/p/mmh3
@@ -183,11 +183,11 @@
       id-token: write # IMPORTANT: this permission is mandatory for trusted 
publishing
     steps:
       - name: Set up built items
-        uses: 
actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
+        uses: 
actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
         with:
           path: dist
           merge-multiple: true
       - name: Publish package distributions to TestPyPI
-        uses: 
pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
+        uses: 
pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
         with:
           repository-url: https://test.pypi.org/legacy/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/CHANGELOG.md new/mmh3-5.3.1/CHANGELOG.md
--- old/mmh3-5.2.1/CHANGELOG.md 2026-03-05 16:11:36.000000000 +0100
+++ new/mmh3-5.3.1/CHANGELOG.md 2026-09-30 18:40:47.000000000 +0200
@@ -5,11 +5,29 @@
 [Contributors](https://mmh3.readthedocs.io/en/stable/CONTRIBUTORS.html) page.
 
 The format is based on
-[Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/).
+[Keep a Changelog 2.0.0](https://keepachangelog.com/en/2.0.0/).
 This project has adhered to
 [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html)
 since version 3.0.0.
 
+## [5.3.1] - 2026-10-01
+
+### Added
+
+- Add Linux riscv64 wheels (manylinux and musllinux)
+  ([#199](https://github.com/hajimes/mmh3/pull/199)).
+
+## [5.3.0] - 2026-08-26
+
+### Added
+
+- Add support for Python 3.15 
([#192](https://github.com/hajimes/mmh3/pull/192)).
+
+### Fixed
+
+- Fix undefined behavior when writing to const-qualified 128-bit digest buffers
+  ([#188](https://github.com/hajimes/mmh3/pull/188)).
+
 ## [5.2.1] - 2026-03-06
 
 ### Added
@@ -281,9 +299,9 @@
 the same as that of 2.0**. E.g.,:
 
 ```pycon
->>> mmh3.hash("foo") # in mmh3 2.0
+>>> mmh3.hash("foo")  # in mmh3 2.0
 -292180858
->>> mmh3.hash("foo") # in mmh3 2.1
+>>> mmh3.hash("foo")  # in mmh3 2.1
 -156908512
 ```
 
@@ -310,6 +328,8 @@
   [Softpedia collected mmh3 1.0 on April 27, 
2011](https://web.archive.org/web/20110430172027/https://linux.softpedia.com/get/Programming/Libraries/mmh3-68314.shtml),
   it must have been uploaded to PyPI on or slightly before this date.
 
+[5.3.1]: https://github.com/hajimes/mmh3/compare/v5.3.0...v5.3.1
+[5.3.0]: https://github.com/hajimes/mmh3/compare/v5.2.1...v5.3.0
 [5.2.1]: https://github.com/hajimes/mmh3/compare/v5.2.0...v5.2.1
 [5.2.0]: https://github.com/hajimes/mmh3/compare/v5.1.0...v5.2.0
 [5.1.0]: https://github.com/hajimes/mmh3/compare/v5.0.1...v5.1.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/README.md new/mmh3-5.3.1/README.md
--- old/mmh3-5.2.1/README.md    2026-03-05 16:11:36.000000000 +0100
+++ new/mmh3-5.3.1/README.md    2026-09-30 18:40:47.000000000 +0200
@@ -41,13 +41,13 @@
 
 ```pycon
 >>> import mmh3
->>> mmh3.hash(b"foo") # returns a 32-bit signed int
+>>> mmh3.hash(b"foo")  # returns a 32-bit signed int
 -156908512
->>> mmh3.hash("foo") # accepts str (UTF-8 encoded)
+>>> mmh3.hash("foo")  # accepts str (UTF-8 encoded)
 -156908512
->>> mmh3.hash(b"foo", 42) # uses 42 as the seed
+>>> mmh3.hash(b"foo", 42)  # uses 42 as the seed
 -1322301282
->>> mmh3.hash(b"foo", 0, False) # returns a 32-bit unsigned int
+>>> mmh3.hash(b"foo", 0, False)  # returns a 32-bit unsigned int
 4138058784
 ```
 
@@ -81,48 +81,33 @@
 See [Changelog (latest 
version)](https://mmh3.readthedocs.io/en/latest/changelog.html)
 for the complete changelog.
 
-### [5.2.1] - 2026-03-06
+### [5.3.1] - 2026-10-01
 
 #### Added
 
-- Add support for the Android wheel for Python 3.14.
+- Add Linux riscv64 wheels (manylinux and musllinux)
+  ([#199](https://github.com/hajimes/mmh3/pull/199)).
 
-#### Removed
+### [5.3.0] - 2026-08-26
 
-- Drop support for Python 3.9, as it has reached the end of life on 2025-10-31.
+#### Added
 
-### [5.2.0] - 2025-07-29
+- Add support for Python 3.15 
([#192](https://github.com/hajimes/mmh3/pull/192)).
 
-#### Added
+#### Fixed
 
-- Add support for Python 3.14, including 3.14t (no-GIL) wheels. However, thread
-  safety for the no-GIL variant is not fully tested yet. Please report any
-  issues you encounter ([#134](https://github.com/hajimes/mmh3/pull/134),
-  [#136](https://github.com/hajimes/mmh3/pull/136)).
-- Add support for Android (Python 3.13 only) and iOS (Python 3.13 and 3.14) 
wheels,
-  enabled by the major version update of
-  [cibuildwheel](https://github.com/pypa/cibuildwheel)
-  ([#135](https://github.com/hajimes/mmh3/pull/135)).
+- Fix undefined behavior when writing to const-qualified 128-bit digest buffers
+  ([#188](https://github.com/hajimes/mmh3/pull/188)).
 
-### [5.1.0] - 2025-01-25
+### [5.2.1] - 2026-03-06
 
 #### Added
 
-- Improve the performance of `hash128()`, `hash64()`, and `hash_bytes()` by
-  using
-  
[METH_FASTCALL](https://docs.python.org/3/c-api/structures.html#c.METH_FASTCALL),
-  reducing the overhead of function calls
-  ([#116](https://github.com/hajimes/mmh3/pull/116)).
-- Add the software paper for this library
-  ([doi:10.21105/joss.06124](https://doi.org/10.21105/joss.06124)), following
-  its publication in the
-  [_Journal of Open Source Software_](https://joss.theoj.org)
-  ([#118](https://github.com/hajimes/mmh3/pull/118)).
+- Add support for the Android wheel for Python 3.14.
 
 #### Removed
 
-- Drop support for Python 3.8, as it has reached the end of life on 2024-10-07
-  ([#117](https://github.com/hajimes/mmh3/pull/117)).
+- Drop support for Python 3.9, as it has reached the end of life on 2025-10-31.
 
 ## License
 
@@ -167,7 +152,7 @@
 >>> mmh3.hash(b"quux", 4294967295)
 258499980
 >>> d = -1
->>> mmh3.hash(b"quux", d & 0xffffffff)
+>>> mmh3.hash(b"quux", d & 0xFFFFFFFF)
 258499980
 ```
 
@@ -270,6 +255,6 @@
 - <https://github.com/ifduyue/python-xxhash>: Python bindings for xxHash (Yue
   Du)
 
+[5.3.1]: https://github.com/hajimes/mmh3/compare/v5.3.0...v5.3.1
+[5.3.0]: https://github.com/hajimes/mmh3/compare/v5.2.1...v5.3.0
 [5.2.1]: https://github.com/hajimes/mmh3/compare/v5.2.0...v5.2.1
-[5.2.0]: https://github.com/hajimes/mmh3/compare/v5.1.0...v5.2.0
-[5.1.0]: https://github.com/hajimes/mmh3/compare/v5.0.1...v5.1.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/docs/CODE_OF_CONDUCT.md 
new/mmh3-5.3.1/docs/CODE_OF_CONDUCT.md
--- old/mmh3-5.2.1/docs/CODE_OF_CONDUCT.md      2026-03-05 16:11:36.000000000 
+0100
+++ new/mmh3-5.3.1/docs/CODE_OF_CONDUCT.md      2026-09-30 18:40:47.000000000 
+0200
@@ -1,5 +1,7 @@
 # Code of Conduct
 
-This project adheres to the ACM Code of Ethics and Professional Conduct
-([https://www.acm.org/code-of-ethics](https://www.acm.org/code-of-ethics)), as
-specified in the version adopted on June 22nd, 2018.
+Contributors to this project are expected to follow the ACM Code of Ethics and
+Professional Conduct, available at
+[https://www.acm.org/code-of-ethics](https://www.acm.org/code-of-ethics). The
+current version of the Code and its guidelines was adopted by the ACM Council
+on June 22, 2018.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/docs/CONTRIBUTORS.md 
new/mmh3-5.3.1/docs/CONTRIBUTORS.md
--- old/mmh3-5.2.1/docs/CONTRIBUTORS.md 2026-03-05 16:11:36.000000000 +0100
+++ new/mmh3-5.3.1/docs/CONTRIBUTORS.md 2026-09-30 18:40:47.000000000 +0200
@@ -11,6 +11,8 @@
 
 - [Alexander Maznev](https://github.com/pik),
   [#6](https://github.com/hajimes/mmh3/pull/6).
+- [Anton Karpov](https://github.com/karpovantonme),
+  [#188](https://github.com/hajimes/mmh3/pull/188).
 - [@arieleizenberg](https://github.com/arieleizenberg),
   [#34](https://github.com/hajimes/mmh3/pull/34).
 - [Micha Gorelick](https://github.com/mynameisfiber),
@@ -26,8 +28,12 @@
   [#15](https://github.com/hajimes/mmh3/pull/15).
 - [Dušan Nikolić](https://github.com/n-dusan),
   [#37](https://github.com/hajimes/mmh3/pull/37).
+- [Julien Stephan](https://github.com/justeph),
+  [#199](https://github.com/hajimes/mmh3/pull/199).
 - [Matthew Honnibal](https://github.com/honnibal),
   [#22](https://github.com/hajimes/mmh3/pull/22).
+- [MUGUNDAN](https://github.com/MugundanMCW),
+  [#175](https://github.com/hajimes/mmh3/pull/175).
 - [wouter bolsterlee](https://github.com/wbolster),
   [#35](https://github.com/hajimes/mmh3/pull/35).
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/docs/api.md new/mmh3-5.3.1/docs/api.md
--- old/mmh3-5.2.1/docs/api.md  2026-03-05 16:11:36.000000000 +0100
+++ new/mmh3-5.3.1/docs/api.md  2026-09-30 18:40:47.000000000 +0200
@@ -125,17 +125,17 @@
 
 ```pycon
 >>> import mmh3
->>> hasher = mmh3.mmh3_x64_128(b"foo", 42) # seed=42
+>>> hasher = mmh3.mmh3_x64_128(b"foo", 42)  # seed=42
 >>> hasher.update(b"bar")
 >>> hasher.digest()
 b'\x82_n\xdd \xac\xb6j\xef\x99\xb1e\xc4\n\xc9\xfd'
->>> hasher.sintdigest() # 128 bit signed int
+>>> hasher.sintdigest()  # 128 bit signed int
 -2943813934500665152301506963178627198
->>> hasher.uintdigest() # 128 bit unsigned int
+>>> hasher.uintdigest()  # 128 bit unsigned int
 337338552986437798311073100468589584258
->>> hasher.stupledigest() # two 64 bit signed ints
+>>> hasher.stupledigest()  # two 64 bit signed ints
 (7689522670935629698, -159584473158936081)
->>> hasher.utupledigest() # two 64 bit unsigned ints
+>>> hasher.utupledigest()  # two 64 bit unsigned ints
 (7689522670935629698, 18287159600550615535)
 ```
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/pyproject.toml 
new/mmh3-5.3.1/pyproject.toml
--- old/mmh3-5.2.1/pyproject.toml       2026-03-05 16:11:36.000000000 +0100
+++ new/mmh3-5.3.1/pyproject.toml       2026-09-30 18:40:47.000000000 +0200
@@ -5,7 +5,7 @@
 
 [project]
 name = "mmh3"
-version = "5.2.1"
+version = "5.3.1"
 description = "Python extension for MurmurHash (MurmurHash3), a set of fast 
and robust hash functions."
 readme = "README.md"
 license = {file = "LICENSE"}
@@ -24,6 +24,7 @@
   "Programming Language :: Python :: 3.12",
   "Programming Language :: Python :: 3.13",
   "Programming Language :: Python :: 3.14",
+  "Programming Language :: Python :: 3.15",
   "Programming Language :: Python :: Free Threading :: 2 - Beta",
   "Topic :: Software Development :: Libraries",
   "Topic :: Utilities"
@@ -31,32 +32,32 @@
 
 [project.optional-dependencies]
 test = [
-  "pytest == 9.0.2",
+  "pytest == 9.1.1",
   "pytest-sugar == 1.1.1"
 ]
 lint = [
-  "actionlint-py == 1.7.11.24",
-  "clang-format == 22.1.0",
-  "codespell == 2.4.1",
-  "pylint == 4.0.5",
-  "ruff == 0.15.4"
+  "actionlint-py == 1.7.12.24",
+  "clang-format == 23.1.0",
+  "codespell == 2.4.3",
+  "pylint == 4.0.8",
+  "ruff == 0.16.5"
 ]
 type = [
-  "mypy == 1.19.1"
+  "mypy == 2.3.1"
 ]
 docs = [
   "myst-parser == 5.0.0",
-  "shibuya == 2026.1.9",
+  "shibuya == 2026.7.12",
   "sphinx == 8.2.3",
   "sphinx-copybutton == 0.5.2"
 ]
 benchmark = [
   "pymmh3 == 0.0.5",
   "pyperf == 2.10.0",
-  "xxhash == 3.6.0"
+  "xxhash == 4.0.1"
 ]
 plot = [
-  "matplotlib == 3.10.8",
+  "matplotlib == 3.10.9",
   "pandas == 3.0.1"
 ]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/src/mmh3/mmh3module.c 
new/mmh3-5.3.1/src/mmh3/mmh3module.c
--- old/mmh3-5.2.1/src/mmh3/mmh3module.c        2026-03-05 16:11:36.000000000 
+0100
+++ new/mmh3-5.3.1/src/mmh3/mmh3module.c        2026-09-30 18:40:47.000000000 
+0200
@@ -1765,7 +1765,7 @@
 static PyObject *
 MMH3Hasher128x64_digest(MMH3Hasher128x64 *self, PyObject *Py_UNUSED(ignored))
 {
-    const char out[MMH3_128_DIGESTSIZE];
+    char out[MMH3_128_DIGESTSIZE];
     MMH3_HASHER_LOCK(self);
     digest_x64_128_impl(self->h1, self->h2, self->buffer1, self->buffer2,
                         self->length, out);
@@ -1777,7 +1777,7 @@
 MMH3Hasher128x64_sintdigest(MMH3Hasher128x64 *self,
                             PyObject *Py_UNUSED(ignored))
 {
-    const char out[MMH3_128_DIGESTSIZE];
+    char out[MMH3_128_DIGESTSIZE];
     MMH3_HASHER_LOCK(self);
     digest_x64_128_impl(self->h1, self->h2, self->buffer1, self->buffer2,
                         self->length, out);
@@ -1801,7 +1801,7 @@
 MMH3Hasher128x64_uintdigest(MMH3Hasher128x64 *self,
                             PyObject *Py_UNUSED(ignored))
 {
-    const char out[MMH3_128_DIGESTSIZE];
+    char out[MMH3_128_DIGESTSIZE];
     MMH3_HASHER_LOCK(self);
     digest_x64_128_impl(self->h1, self->h2, self->buffer1, self->buffer2,
                         self->length, out);
@@ -1834,7 +1834,7 @@
 MMH3Hasher128x64_stupledigest(MMH3Hasher128x64 *self,
                               PyObject *Py_UNUSED(ignored))
 {
-    const char out[MMH3_128_DIGESTSIZE];
+    char out[MMH3_128_DIGESTSIZE];
     MMH3_HASHER_LOCK(self);
     digest_x64_128_impl(self->h1, self->h2, self->buffer1, self->buffer2,
                         self->length, out);
@@ -1866,7 +1866,7 @@
 MMH3Hasher128x64_utupledigest(MMH3Hasher128x64 *self,
                               PyObject *Py_UNUSED(ignored))
 {
-    const char out[MMH3_128_DIGESTSIZE];
+    char out[MMH3_128_DIGESTSIZE];
     MMH3_HASHER_LOCK(self);
     digest_x64_128_impl(self->h1, self->h2, self->buffer1, self->buffer2,
                         self->length, out);
@@ -2160,7 +2160,7 @@
 MMH3Hasher128x86_sintdigest(MMH3Hasher128x86 *self,
                             PyObject *Py_UNUSED(ignored))
 {
-    const char out[MMH3_128_DIGESTSIZE];
+    char out[MMH3_128_DIGESTSIZE];
     MMH3_HASHER_LOCK(self);
     digest_x86_128_impl(self->h1, self->h2, self->h3, self->h4, self->buffer1,
                         self->buffer2, self->buffer3, self->buffer4,
@@ -2185,7 +2185,7 @@
 MMH3Hasher128x86_uintdigest(MMH3Hasher128x86 *self,
                             PyObject *Py_UNUSED(ignored))
 {
-    const char out[MMH3_128_DIGESTSIZE];
+    char out[MMH3_128_DIGESTSIZE];
     MMH3_HASHER_LOCK(self);
     digest_x86_128_impl(self->h1, self->h2, self->h3, self->h4, self->buffer1,
                         self->buffer2, self->buffer3, self->buffer4,
@@ -2210,7 +2210,7 @@
 MMH3Hasher128x86_stupledigest(MMH3Hasher128x86 *self,
                               PyObject *Py_UNUSED(ignored))
 {
-    const char out[MMH3_128_DIGESTSIZE];
+    char out[MMH3_128_DIGESTSIZE];
     MMH3_HASHER_LOCK(self);
     digest_x86_128_impl(self->h1, self->h2, self->h3, self->h4, self->buffer1,
                         self->buffer2, self->buffer3, self->buffer4,
@@ -2233,7 +2233,7 @@
 MMH3Hasher128x86_utupledigest(MMH3Hasher128x86 *self,
                               PyObject *Py_UNUSED(ignored))
 {
-    const char out[MMH3_128_DIGESTSIZE];
+    char out[MMH3_128_DIGESTSIZE];
     MMH3_HASHER_LOCK(self);
     digest_x86_128_impl(self->h1, self->h2, self->h3, self->h4, self->buffer1,
                         self->buffer2, self->buffer3, self->buffer4,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/src/mmh3/murmurhash3.h 
new/mmh3-5.3.1/src/mmh3/murmurhash3.h
--- old/mmh3-5.2.1/src/mmh3/murmurhash3.h       2026-03-05 16:11:36.000000000 
+0100
+++ new/mmh3-5.3.1/src/mmh3/murmurhash3.h       2026-09-30 18:40:47.000000000 
+0200
@@ -233,7 +233,7 @@
 
 static FORCE_INLINE void
 digest_x64_128_impl(uint64_t h1, uint64_t h2, const uint64_t k1,
-                    const uint64_t k2, const Py_ssize_t len, const char *out)
+                    const uint64_t k2, const Py_ssize_t len, char *out)
 {
     h1 ^= mixK1_x64_128(k1);
     h2 ^= mixK2_x64_128(k2);
@@ -261,7 +261,7 @@
 static FORCE_INLINE void
 digest_x86_128_impl(uint32_t h1, uint32_t h2, uint32_t h3, uint32_t h4,
                     const uint32_t k1, const uint32_t k2, const uint32_t k3,
-                    const uint32_t k4, const Py_ssize_t len, const char *out)
+                    const uint32_t k4, const Py_ssize_t len, char *out)
 {
     const uint32_t c1 = 0x239b961b;
     const uint32_t c2 = 0xab0e9789;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mmh3-5.2.1/tox.ini new/mmh3-5.3.1/tox.ini
--- old/mmh3-5.2.1/tox.ini      2026-03-05 16:11:36.000000000 +0100
+++ new/mmh3-5.3.1/tox.ini      2026-09-30 18:40:47.000000000 +0200
@@ -1,7 +1,7 @@
 [tox]
 requires =
     tox>=4
-envlist = lint, type, py{310,311,312,313,314,314t}
+envlist = lint, type, py{310,311,312,313,314,314t,315}
 
 [testenv]
 description = run unit tests

Reply via email to