Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pycairo for openSUSE:Factory checked in at 2026-08-11 17:09:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pycairo (Old) and /work/SRC/openSUSE:Factory/.python-pycairo.new.17972 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pycairo" Tue Aug 11 17:09:40 2026 rev:18 rq:1370482 version:1.29.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pycairo/python-pycairo.changes 2026-01-27 16:06:55.300521323 +0100 +++ /work/SRC/openSUSE:Factory/.python-pycairo.new.17972/python-pycairo.changes 2026-08-11 17:09:59.919903608 +0200 @@ -1,0 +2,10 @@ +Sat Aug 8 07:30:27 UTC 2026 - Bjørn Lie <[email protected]> + +- Update to 1.29.1: + * Update dependencies (libpng, zlib) for the Windows wheels + * Fix documentation build with Python 3.15 + * Build wheels for Python 3.15 (except for 32bit Windows) + * Fix a memory leak in ScaledFont.text_to_glyphs() + * Fix some minor reference leaks + +------------------------------------------------------------------- Old: ---- pycairo-1.29.0.tar.gz New: ---- pycairo-1.29.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pycairo.spec ++++++ --- /var/tmp/diff_new_pack.4JFcbq/_old 2026-08-11 17:10:00.539929887 +0200 +++ /var/tmp/diff_new_pack.4JFcbq/_new 2026-08-11 17:10:00.543930057 +0200 @@ -19,7 +19,7 @@ %{?sle15_python_module_pythons} %define oldpython python Name: python-pycairo -Version: 1.29.0 +Version: 1.29.1 Release: 0 Summary: Python Bindings for Cairo License: LGPL-2.1-or-later OR MPL-1.1 ++++++ pycairo-1.29.0.tar.gz -> pycairo-1.29.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/.ci/download-cairo-win32.py new/pycairo-1.29.1/.ci/download-cairo-win32.py --- old/pycairo-1.29.0/.ci/download-cairo-win32.py 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/.ci/download-cairo-win32.py 2026-08-07 10:24:04.000000000 +0200 @@ -10,7 +10,7 @@ from pathlib import Path from urllib.request import urlretrieve as download -CAIRO_VERSION = "1.18.4-v2" +CAIRO_VERSION = "1.18.4-v3" def get_platform() -> str: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/.github/workflows/test.yml new/pycairo-1.29.1/.github/workflows/test.yml --- old/pycairo-1.29.0/.github/workflows/test.yml 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/.github/workflows/test.yml 2026-08-07 10:24:04.000000000 +0200 @@ -1,224 +1,245 @@ -name: Test - -on: - push: - pull_request: - -jobs: - - msys2: - runs-on: windows-latest - strategy: - fail-fast: false - matrix: - include: - - msystem: MINGW64 - pkgprefix: mingw-w64-x86_64 - - msystem: CLANG64 - pkgprefix: mingw-w64-clang-x86_64 - steps: - - name: Checkout code - uses: actions/checkout@v5 - - - name: setup-msys2 - uses: msys2/setup-msys2@v2 - with: - msystem: ${{ matrix.msystem }} - update: true - install: >- - ${{ matrix.pkgprefix }}-cairo - ${{ matrix.pkgprefix }}-python - ${{ matrix.pkgprefix }}-python-pip - ${{ matrix.pkgprefix }}-python-poetry - ${{ matrix.pkgprefix }}-cc - ${{ matrix.pkgprefix }}-meson - ${{ matrix.pkgprefix }}-ninja - ${{ matrix.pkgprefix }}-pkgconf - - - name: Install dependencies - shell: msys2 {0} - run: | - # XXX: set CC for setuptools so it finds clang - export CC=cc - poetry install - - - name: Build & Test with meson - shell: msys2 {0} - run: | - # XXX: pass python, so global python3 doesn't win - poetry run meson setup -Dpython=python --werror _build - poetry run meson compile -C _build - poetry run meson test -v -C _build - rm -Rf _build - - - name: Build & Test with poetry - shell: msys2 {0} - run: | - export CFLAGS="-Werror -coverage" - export PYTHONDEVMODE=1 - poetry run pip install --no-build-isolation -e . - poetry run coverage run --branch -m pytest - poetry run coverage xml -i - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v5 - - ubuntu: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', 'pypy-3.11'] - steps: - - uses: actions/checkout@v5 - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - allow-prereleases: true - - - name: Install dependencies - run: | - sudo apt-get update -q - sudo apt-get install -y libcairo2-dev ninja-build - pipx install uv - pipx install meson - uv sync - - - name: Install optional test dependencies - if: ${{ !contains(matrix.python-version, 'pypy') && !contains(matrix.python-version, '3.14') }} - run: | - uv sync --group test-extras - - - name: Build & Test with meson - run: | - uv run meson setup --werror _build - uv run meson compile -C _build - uv run meson test -v -C _build - rm -Rf _build - - - name: Build & Test with uv - run: | - export CFLAGS="-Werror -coverage" - export PYTHONDEVMODE=1 - uv pip install --no-build-isolation -e . - uv run coverage run --branch -m pytest - uv run coverage xml -i - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v5 - - - name: Run linters - if: ${{ !contains(matrix.python-version, 'pypy') }} - run: | - uv run flake8 - uv run mypy . - - - name: Build docs - if: ${{ !contains(matrix.python-version, 'pypy') }} - run: | - uv sync --group docs - uv run python -m sphinx -W -a -E -b html -n docs docs/_build - - msvc: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', 'pypy-3.11'] - architecture: ['x64'] - os: ['windows-2022'] - include: - - python-version: '3.10' - architecture: 'x86' - os: 'windows-2022' - - python-version: '3.14' - architecture: 'x86' - os: 'windows-2022' - - python-version: '3.14' - architecture: 'arm64' - os: 'windows-11-arm' - steps: - - uses: actions/checkout@v5 - - - name: Set up Python ${{ matrix.python-version }} - id: setup-python - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - architecture: ${{ matrix.architecture }} - allow-prereleases: true - - - name: Setup MSVC - uses: ilammy/[email protected] - with: - arch : ${{ matrix.architecture }} - - - name: Download and extract Cairo Binary - run: | - python .ci/download-cairo-win32.py "${{ matrix.architecture }}" - - - name: Install dependencies - run: | - pipx install --python "${{ steps.setup-python.outputs.python-path }}" uv - pipx install --python "${{ steps.setup-python.outputs.python-path }}" meson - uv sync - - - name: Build & Test with meson - env: - PKG_CONFIG: ${{ github.workspace }}/cairo-prebuild/bin/pkgconf.exe - PKG_CONFIG_PATH: ${{ github.workspace }}/cairo-prebuild/lib/pkgconfig - CFLAGS: "-DCAIRO_WIN32_STATIC_BUILD=1" - run: | - # XXX: pass python, so global python3 doesn't win - uv run meson setup -Dpython=python --werror _build - uv run meson compile -C _build - uv run meson test -v -C _build - if (-not $?) { exit 1 } - rm -r _build - - - name: Build & Test with uv - env: - PKG_CONFIG: ${{ github.workspace }}/cairo-prebuild/bin/pkgconf.exe - PKG_CONFIG_PATH: ${{ github.workspace }}/cairo-prebuild/lib/pkgconfig - CFLAGS: "-DCAIRO_WIN32_STATIC_BUILD=1" - PYTHONDEVMODE: 1 - run: | - uv pip install --no-build-isolation -e . - uv run coverage run --branch -m pytest - if (-not $?) { exit 1 } - uv run coverage xml -i - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v5 - - macos: - runs-on: macos-latest - - steps: - - name: Checkout code - uses: actions/checkout@v5 - - - name: Install dependencies - run: | - brew install pkg-config cairo python meson ninja uv - uv sync - - - name: Build & Test with meson - run: | - uv run meson setup --werror _build - uv run meson compile -C _build - uv run meson test -v -C _build - rm -Rf _build - - - name: Build & Test with uv - run: | - export CFLAGS="-Werror -coverage" - export PYTHONDEVMODE=1 - uv pip install --no-build-isolation -e . - uv run coverage run --branch -m pytest - uv run coverage xml -i - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v5 +name: Test + +on: + push: + pull_request: + +permissions: {} + +jobs: + + msys2: + runs-on: windows-latest + permissions: + contents: read + strategy: + fail-fast: false + matrix: + include: + - msystem: MINGW64 + pkgprefix: mingw-w64-x86_64 + - msystem: CLANG64 + pkgprefix: mingw-w64-clang-x86_64 + steps: + - name: Checkout code + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: setup-msys2 + uses: msys2/setup-msys2@66cd2cce69caa17b53920067426061ca1de3a884 # v2.32.0 + with: + msystem: ${{ matrix.msystem }} + update: true + install: >- + ${{ matrix.pkgprefix }}-cairo + ${{ matrix.pkgprefix }}-python + ${{ matrix.pkgprefix }}-python-pip + ${{ matrix.pkgprefix }}-python-poetry + ${{ matrix.pkgprefix }}-cc + ${{ matrix.pkgprefix }}-meson + ${{ matrix.pkgprefix }}-ninja + ${{ matrix.pkgprefix }}-pkgconf + + - name: Install dependencies + shell: msys2 {0} + run: | + # XXX: set CC for setuptools so it finds clang + export CC=cc + poetry install + + - name: Build & Test with meson + shell: msys2 {0} + run: | + # XXX: pass python, so global python3 doesn't win + poetry run meson setup -Dpython=python --werror _build + poetry run meson compile -C _build + poetry run meson test -v -C _build + rm -Rf _build + + - name: Build & Test with poetry + shell: msys2 {0} + run: | + export CFLAGS="-Werror -coverage" + export PYTHONDEVMODE=1 + poetry run pip install --no-build-isolation -e . + poetry run coverage run --branch -m pytest + poetry run coverage xml -i + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 + + ubuntu: + runs-on: ubuntu-latest + permissions: + contents: read + strategy: + fail-fast: false + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', '3.15', '3.15t', 'pypy-3.11'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: ${{ matrix.python-version }} + allow-prereleases: true + + - name: Install dependencies + run: | + sudo apt-get update -q + sudo apt-get install -y libcairo2-dev ninja-build + pipx install uv + pipx install meson + uv sync + + - name: Install optional test dependencies + if: ${{ !contains(matrix.python-version, 'pypy') && !contains(matrix.python-version, '3.14') && !contains(matrix.python-version, '3.15') }} + run: | + uv sync --group test-extras + + - name: Build & Test with meson + run: | + uv run meson setup --werror _build + uv run meson compile -C _build + uv run meson test -v -C _build + rm -Rf _build + + - name: Build & Test with uv + run: | + export CFLAGS="-Werror -coverage" + export PYTHONDEVMODE=1 + uv pip install --no-build-isolation -e . + uv run coverage run --branch -m pytest + uv run coverage xml -i + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 + + - name: Run linters + if: ${{ !contains(matrix.python-version, 'pypy') }} + run: | + uv run flake8 + uv run mypy . + + - name: Build docs + if: ${{ !contains(matrix.python-version, 'pypy') }} + run: | + uv sync --group docs + uv run python -m sphinx -W -a -E -b html -n docs docs/_build + + msvc: + runs-on: ${{ matrix.os }} + permissions: + contents: read + strategy: + fail-fast: false + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', '3.14t', '3.15', '3.15t', 'pypy-3.11'] + architecture: ['x64'] + os: ['windows-2022'] + include: + - python-version: '3.10' + architecture: 'x86' + os: 'windows-2022' + - python-version: '3.14' + architecture: 'x86' + os: 'windows-2022' + - python-version: '3.15' + architecture: 'arm64' + os: 'windows-11-arm' + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Set up Python ${{ matrix.python-version }} + id: setup-python + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: ${{ matrix.python-version }} + architecture: ${{ matrix.architecture }} + allow-prereleases: true + + - name: Setup MSVC + uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 + with: + arch : ${{ matrix.architecture }} + + - name: Download and extract Cairo Binary + env: + PYCAIRO_ARCH: ${{ matrix.architecture }} + run: | + python .ci/download-cairo-win32.py "$env:PYCAIRO_ARCH" + + - name: Install dependencies + env: + PYTHON_PATH: ${{ steps.setup-python.outputs.python-path }} + run: | + pipx install --python "$env:PYTHON_PATH" uv + pipx install --python "$env:PYTHON_PATH" meson + uv sync + + - name: Build & Test with meson + env: + PKG_CONFIG: ${{ github.workspace }}/cairo-prebuild/bin/pkgconf.exe + PKG_CONFIG_PATH: ${{ github.workspace }}/cairo-prebuild/lib/pkgconfig + CFLAGS: "-DCAIRO_WIN32_STATIC_BUILD=1" + run: | + # XXX: pass python, so global python3 doesn't win + uv run meson setup -Dpython=python --werror _build + uv run meson compile -C _build + uv run meson test -v -C _build + if (-not $?) { exit 1 } + rm -r _build + + - name: Build & Test with uv + env: + PKG_CONFIG: ${{ github.workspace }}/cairo-prebuild/bin/pkgconf.exe + PKG_CONFIG_PATH: ${{ github.workspace }}/cairo-prebuild/lib/pkgconfig + CFLAGS: "-DCAIRO_WIN32_STATIC_BUILD=1" + PYTHONDEVMODE: 1 + run: | + uv pip install --no-build-isolation -e . + uv run coverage run --branch -m pytest + if (-not $?) { exit 1 } + uv run coverage xml -i + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 + + macos: + runs-on: macos-latest + permissions: + contents: read + steps: + - name: Checkout code + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Install dependencies + run: | + brew install pkg-config cairo python meson ninja uv + uv sync + + - name: Build & Test with meson + run: | + uv run meson setup --werror _build + uv run meson compile -C _build + uv run meson test -v -C _build + rm -Rf _build + + - name: Build & Test with uv + run: | + export CFLAGS="-Werror -coverage" + export PYTHONDEVMODE=1 + uv pip install --no-build-isolation -e . + uv run coverage run --branch -m pytest + uv run coverage xml -i + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/.github/workflows/wheels.yml new/pycairo-1.29.1/.github/workflows/wheels.yml --- old/pycairo-1.29.0/.github/workflows/wheels.yml 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/.github/workflows/wheels.yml 2026-08-07 10:24:04.000000000 +0200 @@ -2,16 +2,23 @@ on: [push, pull_request] +permissions: {} + jobs: build_sdist: runs-on: ubuntu-latest + permissions: + contents: read + steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false - name: Set up Python - uses: actions/setup-python@v6 + uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 with: python-version: '3.11' @@ -24,7 +31,7 @@ - name: Build sdist run: python -m build --sdist - - uses: actions/upload-artifact@v5 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: sdist path: ./dist/*.tar.gz @@ -32,6 +39,8 @@ build_wheels: name: Build wheels on ${{ matrix.os }} (${{ matrix.platform_id }}) runs-on: ${{ matrix.os }} + permissions: + contents: read strategy: fail-fast: false matrix: @@ -47,25 +56,27 @@ arch: arm64 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false - name: Setup MSVC - uses: ilammy/[email protected] + uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 with: arch : ${{ matrix.arch }} - name: Build wheels - uses: pypa/[email protected] + uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 env: CFLAGS: "-DCAIRO_WIN32_STATIC_BUILD=1" CIBW_BEFORE_BUILD: "python {package}/.ci/download-cairo-win32.py ${{ matrix.arch }}" - CIBW_BUILD: cp310-${{ matrix.platform_id }} cp311-${{ matrix.platform_id }} cp312-${{ matrix.platform_id }} cp313-${{ matrix.platform_id }} cp314-${{ matrix.platform_id }} cp314t-${{ matrix.platform_id }} - CIBW_SKIP: cp314t-win32 + CIBW_BUILD: cp310-${{ matrix.platform_id }} cp311-${{ matrix.platform_id }} cp312-${{ matrix.platform_id }} cp313-${{ matrix.platform_id }} cp314-${{ matrix.platform_id }} cp314t-${{ matrix.platform_id }} cp315-${{ matrix.platform_id }} cp315t-${{ matrix.platform_id }} + CIBW_SKIP: cp314t-win32 cp315-win32 cp315t-win32 CIBW_TEST_REQUIRES: pytest==8.3.5 CIBW_TEST_COMMAND: bash {package}/.ci/test-wheels.sh {package} CIBW_ENVIRONMENT_WINDOWS: PKG_CONFIG_PATH='${{ github.workspace }}/cairo-prebuild/lib/pkgconfig' PKG_CONFIG='${{ github.workspace }}/cairo-prebuild/bin/pkgconf.exe' - - uses: actions/upload-artifact@v5 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: "wheel-${{ matrix.arch }}" path: ./wheelhouse/*.whl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/NEWS new/pycairo-1.29.1/NEWS --- old/pycairo-1.29.0/NEWS 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/NEWS 2026-08-07 10:24:04.000000000 +0200 @@ -1,5 +1,16 @@ Since version 1.11.0 Pycairo uses `Semantic Versioning <http://semver.org/>`__ +.. _v1.29.1: + +1.29.1 - 2026-08-07 +------------------- + +* Update dependencies (libpng, zlib) for the Windows wheels :pr:`442` +* Fix documentation build with Python 3.15 :pr:`441` +* Build wheels for Python 3.15 (except for 32bit Windows) :pr:`444` +* Fix a memory leak in :meth:`ScaledFont.text_to_glyphs` :pr:`446` +* Fix some minor reference leaks :pr:`447` + .. _v1.29.0: 1.29.0 - 2025-11-11 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/PKG-INFO new/pycairo-1.29.1/PKG-INFO --- old/pycairo-1.29.0/PKG-INFO 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/PKG-INFO 2026-08-07 10:24:04.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: pycairo -Version: 1.29.0 +Version: 1.29.1 Summary: Python interface for cairo Maintainer-Email: Christoph Reiter <[email protected]> License: LGPL-2.1-only OR MPL-1.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/cairo/font.c new/pycairo-1.29.1/cairo/font.c --- old/pycairo-1.29.0/cairo/font.c 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/cairo/font.c 2026-08-07 10:24:04.000000000 +0200 @@ -429,10 +429,9 @@ goto error; pyglyph = PyObject_Call( (PyObject *)&PycairoGlyph_Type, glyph_args, NULL); - if (pyglyph == NULL) { - Py_DECREF (glyph_args); + Py_DECREF (glyph_args); + if (pyglyph == NULL) goto error; - } PyList_SET_ITEM (glyph_list, i, pyglyph); } cairo_glyph_free (glyphs); @@ -450,10 +449,9 @@ goto error; pycluster = PyObject_Call( (PyObject *)&PycairoTextCluster_Type, cluster_args, NULL); - if (pycluster == NULL) { - Py_DECREF (cluster_args); + Py_DECREF (cluster_args); + if (pycluster == NULL) goto error; - } PyList_SET_ITEM (cluster_list, i, pycluster); } cairo_text_cluster_free (clusters); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/cairo/pattern.c new/pycairo-1.29.1/cairo/pattern.c --- old/pycairo-1.29.0/cairo/pattern.c 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/cairo/pattern.c 2026-08-07 10:24:04.000000000 +0200 @@ -1018,6 +1018,7 @@ result = NULL; goto error; } + Py_DECREF (result); Py_DECREF (pysurface); PyGILState_Release (gstate); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/cairo/surface.c new/pycairo-1.29.1/cairo/surface.c --- old/pycairo-1.29.0/cairo/surface.c 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/cairo/surface.c 2026-08-07 10:24:04.000000000 +0200 @@ -503,7 +503,7 @@ mime_intern = PyUnicode_InternFromString (mime_type); surface_capsule = PyCapsule_New(o->surface, NULL, NULL); view_capsule = PyCapsule_New(view, NULL, NULL); - user_data = Py_BuildValue("(NNOO)", surface_capsule, view_capsule, obj, mime_intern); + user_data = Py_BuildValue("(NNON)", surface_capsule, view_capsule, obj, mime_intern); if (user_data == NULL) { PyBuffer_Release (view); PyMem_Free (view); @@ -558,6 +558,7 @@ mime_intern = PyUnicode_InternFromString (mime_type); user_data = cairo_surface_get_user_data( o->surface, (cairo_user_data_key_t *)mime_intern); + Py_DECREF(mime_intern); if (user_data == NULL) { /* In case the mime data wasn't set through the Python API just copy it */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/docs/conf.py new/pycairo-1.29.1/docs/conf.py --- old/pycairo-1.29.0/docs/conf.py 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/docs/conf.py 2026-08-07 10:24:04.000000000 +0200 @@ -1,17 +1,17 @@ +import importlib.machinery +import importlib.util import os import sys dir_ = os.path.dirname(os.path.realpath(__file__)) - - -def exec_module(path): - import importlib.machinery - loader = importlib.machinery.SourceFileLoader("cairo", path) - return loader.load_module() - - -sys.modules["cairo"] = exec_module(os.path.join(dir_, "..", "cairo", "__init__.pyi")) +loader = importlib.machinery.SourceFileLoader( + "cairo", os.path.join(dir_, "..", "cairo", "__init__.pyi") +) +spec = importlib.util.spec_from_loader("cairo", loader) +module = importlib.util.module_from_spec(spec) +sys.modules["cairo"] = module +loader.exec_module(module) extensions = [ 'sphinx.ext.intersphinx', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/meson.build new/pycairo-1.29.1/meson.build --- old/pycairo-1.29.0/meson.build 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/meson.build 2026-08-07 10:24:04.000000000 +0200 @@ -1,6 +1,6 @@ project( 'pycairo', 'c', - version: '1.29.0', + version: '1.29.1', meson_version: '>= 0.64.0', license: 'LGPL-2.1-only OR MPL-1.1', default_options: [ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pycairo-1.29.0/pyproject.toml new/pycairo-1.29.1/pyproject.toml --- old/pycairo-1.29.0/pyproject.toml 2025-11-11 20:01:50.000000000 +0100 +++ new/pycairo-1.29.1/pyproject.toml 2026-08-07 10:24:04.000000000 +0200 @@ -1,6 +1,6 @@ [project] name = "pycairo" -version = "1.29.0" +version = "1.29.1" description = "Python interface for cairo" readme = "README.rst" requires-python = ">=3.10"
