Bug 2460576

Summary: python-meshio: FTBFS in Fedora Rawhide: binascii.Error: Invalid base64-encoded string: number of data characters (8889) cannot be 1 more than a multiple of 4
Product: [Fedora] Fedora Reporter: Karolina Surma <ksurma>
Component: python-meshioAssignee: Sandro <gui1ty>
Status: NEW --- QA Contact:
Severity: medium Docs Contact:
Priority: unspecified    
Version: rawhideCC: code, gui1ty, neuro-sig
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Linux   
URL: https://koschei.fedoraproject.org/package/python-meshio
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-22 11:06:23 UTC
Description of problem:
Package python-meshio fails to build from source in Fedora Rawhide.

Version-Release number of selected component (if applicable):
5.3.5-9.fc44

Steps to Reproduce:
koji build --scratch f45 python-meshio-5.3.5-9.fc44.src.rpm

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

Reproducible: Always

Actual Results:
__________ test_read_from_file[01_raw_binary_int64.vtu-tetra-162-64] ___________
filename = PosixPath('/builddir/build/BUILD/python-meshio-5.3.5-build/meshio-5.3.5/tests/meshes/vtu/01_raw_binary_int64.vtu')
ref_cells = 'tetra', ref_num_cells = 162, ref_num_pnt = 64
    @pytest.mark.parametrize(
        "filename, ref_cells, ref_num_cells, ref_num_pnt",
        [
            ("00_raw_binary.vtu", "tetra", 162, 64),
            ("01_raw_binary_int64.vtu", "tetra", 162, 64),
            ("02_raw_compressed.vtu", "tetra", 162, 64),
        ],
    )
    def test_read_from_file(filename, ref_cells, ref_num_cells, ref_num_pnt):
        this_dir = pathlib.Path(__file__).resolve().parent
        filename = this_dir / "meshes" / "vtu" / filename
    
>       mesh = meshio.read(filename)
               ^^^^^^^^^^^^^^^^^^^^^
tests/test_vtu.py:76: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/_helpers.py:71: in read
    return _read_file(Path(filename), file_format)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/_helpers.py:103: in _read_file
    return reader_map[file_format](str(path))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/vtu/_vtu.py:577: in read
    reader = VtuReader(filename)
             ^^^^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/vtu/_vtu.py:389: in __init__
    piece_cells[data_array.attrib["Name"]] = self.read_data(
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/vtu/_vtu.py:558: in read_data
    data = reader(self.appended_data[offset:], dtype)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/vtu/_vtu.py:448: in read_uncompressed_binary
    byte_string = base64.b64decode(data)
                  ^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
s = b'QBQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAAA...oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo='
altchars = None, validate = False
    def b64decode(s, altchars=None, validate=False):
        """Decode the Base64 encoded bytes-like object or ASCII string s.
    
        Optional altchars must be a bytes-like object or ASCII string of length 2
        which specifies the alternative alphabet used instead of the '+' and '/'
        characters.
    
        The result is returned as a bytes object.  A binascii.Error is raised if
        s is incorrectly padded.
    
        If validate is False (the default), characters that are neither in the
        normal base-64 alphabet nor the alternative alphabet are discarded prior
        to the padding check.  If validate is True, these non-alphabet characters
        in the input result in a binascii.Error.
        For more information about the strict base64 check, see:
    
        https://docs.python.org/3.11/library/binascii.html#binascii.a2b_base64
        """
        s = _bytes_from_decode_data(s)
        if altchars is not None:
            altchars = _bytes_from_decode_data(altchars)
            assert len(altchars) == 2, repr(altchars)
            s = s.translate(bytes.maketrans(altchars, b'+/'))
>       return binascii.a2b_base64(s, strict_mode=validate)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       binascii.Error: Invalid base64-encoded string: number of data characters (8889) cannot be 1 more than a multiple of 4
/usr/lib64/python3.14/base64.py:85: Error
___________ test_read_from_file[02_raw_compressed.vtu-tetra-162-64] ____________
filename = PosixPath('/builddir/build/BUILD/python-meshio-5.3.5-build/meshio-5.3.5/tests/meshes/vtu/02_raw_compressed.vtu')
ref_cells = 'tetra', ref_num_cells = 162, ref_num_pnt = 64
    @pytest.mark.parametrize(
        "filename, ref_cells, ref_num_cells, ref_num_pnt",
        [
            ("00_raw_binary.vtu", "tetra", 162, 64),
            ("01_raw_binary_int64.vtu", "tetra", 162, 64),
            ("02_raw_compressed.vtu", "tetra", 162, 64),
        ],
    )
    def test_read_from_file(filename, ref_cells, ref_num_cells, ref_num_pnt):
        this_dir = pathlib.Path(__file__).resolve().parent
        filename = this_dir / "meshes" / "vtu" / filename
    
>       mesh = meshio.read(filename)
               ^^^^^^^^^^^^^^^^^^^^^
tests/test_vtu.py:76: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/_helpers.py:71: in read
    return _read_file(Path(filename), file_format)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/_helpers.py:103: in _read_file
    return reader_map[file_format](str(path))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/vtu/_vtu.py:577: in read
    reader = VtuReader(filename)
             ^^^^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/vtu/_vtu.py:389: in __init__
    piece_cells[data_array.attrib["Name"]] = self.read_data(
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/vtu/_vtu.py:558: in read_data
    data = reader(self.appended_data[offset:], dtype)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.14/site-packages/meshio/vtu/_vtu.py:448: in read_uncompressed_binary
    byte_string = base64.b64decode(data)
                  ^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
s = b'QBQAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAAA...oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo='
altchars = None, validate = False
    def b64decode(s, altchars=None, validate=False):
        """Decode the Base64 encoded bytes-like object or ASCII string s.
    
        Optional altchars must be a bytes-like object or ASCII string of length 2
        which specifies the alternative alphabet used instead of the '+' and '/'
        characters.
    
        The result is returned as a bytes object.  A binascii.Error is raised if
        s is incorrectly padded.
    
        If validate is False (the default), characters that are neither in the
        normal base-64 alphabet nor the alternative alphabet are discarded prior
        to the padding check.  If validate is True, these non-alphabet characters
        in the input result in a binascii.Error.
        For more information about the strict base64 check, see:
    
        https://docs.python.org/3.11/library/binascii.html#binascii.a2b_base64
        """
        s = _bytes_from_decode_data(s)
        if altchars is not None:
            altchars = _bytes_from_decode_data(altchars)
            assert len(altchars) == 2, repr(altchars)
            s = s.translate(bytes.maketrans(altchars, b'+/'))
>       return binascii.a2b_base64(s, strict_mode=validate)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       binascii.Error: Invalid base64-encoded string: number of data characters (8889) cannot be 1 more than a multiple of 4
/usr/lib64/python3.14/base64.py:85: Error

Comment 1 Ben Beasley 2026-04-28 05:56:54 UTC
I filed https://github.com/nschloe/meshio/issues/1558 asking upstream to comment on the maintenance status of meshio, and I filed https://github.com/mikedh/trimesh/issues/2533 to raise awareness with trimesh, the sole reverse dependency in Fedora.

I think that these test failures look too significant to ignore, and we should consider retiring the package for Fedora 45 ahead of Python 3.15 integration and patching the dependency out of python-trimesh’s “recommend” extra. We could wait a little while for a response on https://github.com/nschloe/meshio/issues/1558, but I think even an expression of intent to resume development would not remove the problem in the short/medium term, just give us hope that the package may be unretired again in the future.

Comment 2 Ben Beasley 2026-04-28 06:04:18 UTC
Correction: python-trimesh only uses meshio as a test dependency via the “test_more” extra. I’m removing this dependency now, making python-meshio a leaf package in F45/Rawhide.