Bug 2389370 - python-cairocffi: FTBFS in Fedora 43 (test fails due to a gdk-pixbuf2 problem)
Summary: python-cairocffi: FTBFS in Fedora 43 (test fails due to a gdk-pixbuf2 problem)
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Fedora
Classification: Fedora
Component: python-cairocffi
Version: 43
Hardware: Unspecified
OS: Linux
unspecified
medium
Target Milestone: ---
Assignee: Miro Hrončok
QA Contact: Fedora Extras Quality Assurance
URL: https://koschei.fedoraproject.org/pac...
Whiteboard:
Depends On: 2388961
Blocks: F43FTBFS PYC3.14rc3
TreeView+ depends on / blocked
 
Reported: 2025-08-19 10:40 UTC by Miro Hrončok
Modified: 2025-09-12 19:22 UTC (History)
4 users (show)

Fixed In Version: python-cairocffi-1.7.1-4.fc43
Clone Of:
Environment:
Last Closed: 2025-09-12 19:22:11 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
GNOME Gitlab GNOME gdk-pixbuf merge_requests 219 0 None merged glycin: Save jpeg without alpha 2025-08-26 13:21:54 UTC

Description Miro Hrončok 2025-08-19 10:40:07 UTC
Description of problem:
Package python-cairocffi fails to build from source in Fedora 43 but not rawhide.

Version-Release number of selected component (if applicable):
1.7.1-3.fc43

Steps to Reproduce:
fedpkg build

Additional info:
This package is tracked by Koschei. See:
https://koschei.fedoraproject.org/package/python-cairocffi


=================================== FAILURES ===================================
___________________________________ test_api ___________________________________
    def test_api():
        with pytest.raises(pixbuf.ImageLoadingError):
            pixbuf.decode_to_image_surface(b'')
        with pytest.raises(pixbuf.ImageLoadingError):
            pixbuf.decode_to_image_surface(b'Not a valid image.')
        with pytest.raises(pixbuf.ImageLoadingError):
            pixbuf.decode_to_image_surface(PNG_BYTES[:10])
>       surface, format_name = pixbuf.decode_to_image_surface(PNG_BYTES)
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/test_pixbuf.py:36: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:129: in decode_to_image_surface
    pixbuf, format_name = decode_to_pixbuf(image_data, width, height)
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:100: in decode_to_pixbuf
    handle_g_error(error, gdk_pixbuf.gdk_pixbuf_loader_close(loader, error))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
error = <cdata 'GError *' 0x7ffee4002450>, return_value = 0
    def handle_g_error(error, return_value):
        """Convert a ``GError**`` to a Python :exception:`ImageLoadingError`,
        and raise it.
    
        """
        error = error[0]
        assert bool(return_value) == (error == ffi.NULL)
        if error != ffi.NULL:
            if error.message != ffi.NULL:
                message = ('Pixbuf error: ' +
                           ffi.string(error.message).decode('utf8', 'replace'))
            else:  # pragma: no cover
                message = 'Pixbuf error'
            glib.g_error_free(error)
>           raise ImageLoadingError(message)
E           cairocffi.pixbuf.ImageLoadingError: Pixbuf error: Remote error: org.freedesktop.zbus.Error: no description
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:64: ImageLoadingError
___________________________________ test_gdk ___________________________________
    def test_gdk():
        if pixbuf.gdk is None:
            pytest.xfail()
>       pixbuf_obj, format_name = pixbuf.decode_to_pixbuf(PNG_BYTES)
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/test_pixbuf.py:44: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:100: in decode_to_pixbuf
    handle_g_error(error, gdk_pixbuf.gdk_pixbuf_loader_close(loader, error))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
error = <cdata 'GError *' 0x7ffee0000ef0>, return_value = 0
    def handle_g_error(error, return_value):
        """Convert a ``GError**`` to a Python :exception:`ImageLoadingError`,
        and raise it.
    
        """
        error = error[0]
        assert bool(return_value) == (error == ffi.NULL)
        if error != ffi.NULL:
            if error.message != ffi.NULL:
                message = ('Pixbuf error: ' +
                           ffi.string(error.message).decode('utf8', 'replace'))
            else:  # pragma: no cover
                message = 'Pixbuf error'
            glib.g_error_free(error)
>           raise ImageLoadingError(message)
E           cairocffi.pixbuf.ImageLoadingError: Pixbuf error: Remote error: org.freedesktop.zbus.Error: no description
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:64: ImageLoadingError
_________________________________ test_slices __________________________________
    def test_slices():
>       pixbuf_obj, format_name = pixbuf.decode_to_pixbuf(PNG_BYTES)
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/test_pixbuf.py:50: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:100: in decode_to_pixbuf
    handle_g_error(error, gdk_pixbuf.gdk_pixbuf_loader_close(loader, error))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
error = <cdata 'GError *' 0x7ffee4001040>, return_value = 0
    def handle_g_error(error, return_value):
        """Convert a ``GError**`` to a Python :exception:`ImageLoadingError`,
        and raise it.
    
        """
        error = error[0]
        assert bool(return_value) == (error == ffi.NULL)
        if error != ffi.NULL:
            if error.message != ffi.NULL:
                message = ('Pixbuf error: ' +
                           ffi.string(error.message).decode('utf8', 'replace'))
            else:  # pragma: no cover
                message = 'Pixbuf error'
            glib.g_error_free(error)
>           raise ImageLoadingError(message)
E           cairocffi.pixbuf.ImageLoadingError: Pixbuf error: Remote error: org.freedesktop.zbus.Error: no description
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:64: ImageLoadingError
__________________________________ test_size ___________________________________
    def test_size():
>       pixbuf_obj, format_name = pixbuf.decode_to_pixbuf(PNG_BYTES, 10, 10)
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/test_pixbuf.py:56: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:100: in decode_to_pixbuf
    handle_g_error(error, gdk_pixbuf.gdk_pixbuf_loader_close(loader, error))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
error = <cdata 'GError *' 0x7ffee0001960>, return_value = 0
    def handle_g_error(error, return_value):
        """Convert a ``GError**`` to a Python :exception:`ImageLoadingError`,
        and raise it.
    
        """
        error = error[0]
        assert bool(return_value) == (error == ffi.NULL)
        if error != ffi.NULL:
            if error.message != ffi.NULL:
                message = ('Pixbuf error: ' +
                           ffi.string(error.message).decode('utf8', 'replace'))
            else:  # pragma: no cover
                message = 'Pixbuf error'
            glib.g_error_free(error)
>           raise ImageLoadingError(message)
E           cairocffi.pixbuf.ImageLoadingError: Pixbuf error: Remote error: org.freedesktop.zbus.Error: no description
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:64: ImageLoadingError
___________________________________ test_png ___________________________________
    def test_png():
>       pixbuf_obj, format_name = pixbuf.decode_to_pixbuf(JPEG_BYTES)
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/test_pixbuf.py:65: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:100: in decode_to_pixbuf
    handle_g_error(error, gdk_pixbuf.gdk_pixbuf_loader_close(loader, error))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
error = <cdata 'GError *' 0x7ffee4002de0>, return_value = 0
    def handle_g_error(error, return_value):
        """Convert a ``GError**`` to a Python :exception:`ImageLoadingError`,
        and raise it.
    
        """
        error = error[0]
        assert bool(return_value) == (error == ffi.NULL)
        if error != ffi.NULL:
            if error.message != ffi.NULL:
                message = ('Pixbuf error: ' +
                           ffi.string(error.message).decode('utf8', 'replace'))
            else:  # pragma: no cover
                message = 'Pixbuf error'
            glib.g_error_free(error)
>           raise ImageLoadingError(message)
E           cairocffi.pixbuf.ImageLoadingError: Pixbuf error: Remote error: org.freedesktop.zbus.Error: no description
../BUILDROOT/usr/lib/python3.14/site-packages/cairocffi/pixbuf.py:64: ImageLoadingError
=========================== short test summary info ============================
FAILED test_pixbuf.py::test_api - cairocffi.pixbuf.ImageLoadingError: Pixbuf ...
FAILED test_pixbuf.py::test_gdk - cairocffi.pixbuf.ImageLoadingError: Pixbuf ...
FAILED test_pixbuf.py::test_slices - cairocffi.pixbuf.ImageLoadingError: Pixb...
FAILED test_pixbuf.py::test_size - cairocffi.pixbuf.ImageLoadingError: Pixbuf...
FAILED test_pixbuf.py::test_png - cairocffi.pixbuf.ImageLoadingError: Pixbuf ...
========================= 5 failed, 50 passed in 3.86s =========================

Reproducible: Always

Comment 1 Miro Hrončok 2025-08-19 10:42:14 UTC
Seems like this was a problem on rawhide as well, but something has fixed it since: https://koschei.fedoraproject.org/package/python-cairocffi?collection=f44

Comment 2 Miro Hrončok 2025-08-26 11:08:43 UTC
Hello. This is a bulk comment.

This package still needs to be rebuilt and/or shipped with Python 3.14.0rc2+ bytecode in Fedora 43.

The Beta Freeze of Fedora 43 is scheduled to start today. Please prioritize this bugzilla accordingly.

Thanks.

Comment 4 Miro Hrončok 2025-08-26 13:34:52 UTC
OK, I tried backporting that MR to gdk-pixbuf2. However, with just that, python-cairocffi %check crashes. So perhaps this needs more commits, and I'll wait it out.

(This can rebuild for rc2 bytecode after the freeze with almost no risk.)

Comment 5 Fedora Update System 2025-08-27 10:09:36 UTC
FEDORA-2025-93cb3198d8 (python-cairocffi-1.7.1-4.fc43) has been submitted as an update to Fedora 43.
https://bodhi.fedoraproject.org/updates/FEDORA-2025-93cb3198d8

Comment 6 Miro Hrončok 2025-08-27 10:11:02 UTC
Built in a side tag with older gdk-pixbuf2.

Requesting a freeze exception to get it over with.

Comment 7 Fedora Update System 2025-08-28 01:35:09 UTC
FEDORA-2025-93cb3198d8 has been pushed to the Fedora 43 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf upgrade --enablerepo=updates-testing --refresh --advisory=FEDORA-2025-93cb3198d8`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2025-93cb3198d8

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 8 Fedora Update System 2025-09-12 19:22:11 UTC
FEDORA-2025-93cb3198d8 (python-cairocffi-1.7.1-4.fc43) has been pushed to the Fedora 43 stable repository.
If problem still persists, please make note of it in this bug report.


Note You need to log in before you can comment on or make changes to this bug.