Bug 2460576 - 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
Summary: python-meshio: FTBFS in Fedora Rawhide: binascii.Error: Invalid base64-encode...
Keywords:
Status: NEW
Alias: None
Product: Fedora
Classification: Fedora
Component: python-meshio
Version: rawhide
Hardware: Unspecified
OS: Linux
unspecified
medium
Target Milestone: ---
Assignee: Sandro
QA Contact:
URL: https://koschei.fedoraproject.org/pac...
Whiteboard:
Depends On:
Blocks: PYTHON3.15 F45FTBFS, RAWHIDEFTBFS
TreeView+ depends on / blocked
 
Reported: 2026-04-22 11:06 UTC by Karolina Surma
Modified: 2026-04-28 06:04 UTC (History)
3 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed:
Type: ---
Embargoed:


Attachments (Terms of Use)

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.


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