Bug 2389370

Summary: python-cairocffi: FTBFS in Fedora 43 (test fails due to a gdk-pixbuf2 problem)
Product: [Fedora] Fedora Reporter: Miro Hrončok <mhroncok>
Component: python-cairocffiAssignee: Miro Hrončok <mhroncok>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 43CC: epel-packagers-sig, mhroncok, orion, python-packagers-sig
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Linux   
URL: https://koschei.fedoraproject.org/package/python-cairocffi
Whiteboard:
Fixed In Version: python-cairocffi-1.7.1-4.fc43 Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2025-09-12 19:22:11 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 2388961    
Bug Blocks: 2339432, 2373702    

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.