Bug 2458731

Summary: weasyprint: FTBFS in Fedora Rawhide: Failed: Pixel (5, 1) in radial_gradient_reflect: expected rgba(255, 0, 0), got rgba(0, 255, 0)
Product: [Fedora] Fedora Reporter: Karolina Surma <ksurma>
Component: weasyprintAssignee: Felix Schwarz <fschwarz>
Status: NEW --- QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: rawhideCC: fschwarz, spacewar
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Linux   
URL: https://koschei.fedoraproject.org/package/weasyprint
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 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:    
Bug Blocks: 2412434, 2433833    

Description Karolina Surma 2026-04-15 17:34:47 UTC
Description of problem:
Package weasyprint fails to build from source in Fedora Rawhide.

Version-Release number of selected component (if applicable):
68.1-1.fc45

Steps to Reproduce:
koji build --scratch f45 weasyprint-68.1-1.fc45.src.rpm

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

Reproducible: Always

Actual Results:
_________________________ test_radial_gradient_reflect _________________________
[gw1] linux -- Python 3.14.4 /usr/bin/python3
assert_pixels = <function assert_pixels.<locals>.<lambda> at 0xffff76460670>
    @assert_no_logs
    def test_radial_gradient_reflect(assert_pixels):
>       assert_pixels('''
            ____________
            _GrrrrrrrrG_
            _rrrGGGGrrr_
            _rrGBBBBGrr_
            _rGBBBBBBGr_
            _rGBBGGBBGr_
            _rGBBGGBBGr_
            _rGBBBBBBGr_
            _rrGBBBBGrr_
            _rrrGGGGrrr_
            _GrrrrrrrrG_
            ____________
        ''', '''
          <style>
            @page { size: 12px }
            svg { display: block }
          </style>
          <svg width="12px" height="12px" xmlns="http://www.w3.org/2000/svg">
            <defs>
              <radialGradient id="grad" cx="0.5" cy="0.5" r="0.5"
                fx="0.5" fy="0.5" fr="0.2"
                gradientUnits="objectBoundingBox" spreadMethod="reflect">
                <stop stop-color="blue" offset="33%"></stop>
                <stop stop-color="lime" offset="33%"></stop>
                <stop stop-color="lime" offset="66%"></stop>
                <stop stop-color="red" offset="66%"></stop>
              </radialGradient>
            </defs>
            <rect x="1" y="1" width="10" height="10" fill="url(#grad)" />
          </svg>
        ''')
tests/draw/svg/test_gradients.py:992: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/conftest.py:96: in <lambda>
    return lambda *args, **kwargs: draw.assert_pixels(
tests/draw/__init__.py:61: in assert_pixels
    assert_pixels_equal(name, width, height, pixels, expected_pixels)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
name = 'radial_gradient_reflect', width = 12, height = 12
raw = ((255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), ...)
expected_raw = [(255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), (255, 255, 255), ...]
tolerance = 0
    def assert_pixels_equal(name, width, height, raw, expected_raw, tolerance=0):
        """Take 2 matrices of pixels and assert that they are the same."""
        if raw != expected_raw:  # pragma: no cover
            pixels = zip_longest(raw, expected_raw, fillvalue=(-1, -1, -1))
            for i, (value, expected) in enumerate(pixels):
                if expected is None:
                    continue
                if any(abs(value - expected) > tolerance
                       for value, expected in zip(value, expected)):
                    actual_height = len(raw) // width
                    write_png(name, raw, width, actual_height)
                    expected_raw = [
                        pixel or (255, 255, 255) for pixel in expected_raw]
                    write_png(f'{name}.expected', expected_raw, width, height)
                    x = i % width
                    y = i // width
>                   pytest.fail(
                        f'Pixel ({x}, {y}) in {name}: '
                        f'expected rgba{expected}, got rgba{value}')
E                   Failed: Pixel (5, 1) in radial_gradient_reflect: expected rgba(255, 0, 0), got rgba(0, 255, 0)
tests/draw/__init__.py:110: Failed
------------------------------ Captured log call -------------------------------
INFO     weasyprint.progress:__init__.py:162 Step 1 - Fetching and parsing HTML - HTML string
INFO     weasyprint.progress:__init__.py:290 Step 2 - Fetching and parsing CSS - CSS string
INFO     weasyprint.progress:__init__.py:78 Step 3 - Applying CSS
INFO     weasyprint.progress:document.py:174 Step 4 - Creating formatting structure
INFO     weasyprint.progress:page.py:999 Step 5 - Creating layout - Page 1
INFO     weasyprint.progress:__init__.py:123 Step 6 - Creating PDF
INFO     weasyprint.progress:__init__.py:248 Step 7 - Adding PDF metadata
=========================== short test summary info ============================
FAILED tests/draw/svg/test_bounding_box.py::test_bounding_box_circle - Failed...
FAILED tests/draw/svg/test_bounding_box.py::test_bounding_box_ellipse - Faile...
FAILED tests/draw/svg/test_gradients.py::test_linear_gradient_transform_repeat
FAILED tests/draw/test_gradient.py::test_linear_gradients_5 - Failed: Pixel (...
FAILED tests/draw/svg/test_gradients.py::test_linear_gradient_transform_repeat_userspace
FAILED tests/draw/test_background.py::test_canvas_background_size - Failed: P...
FAILED tests/draw/test_gradient.py::test_radial_gradients_negative - Failed: ...
FAILED tests/draw/svg/test_gradients.py::test_radial_gradient_repeat - Failed...
FAILED tests/draw/svg/test_gradients.py::test_radial_gradient_reflect - Faile...