Package: ftp.debian.org
Severity: normal
X-Debbugs-Cc: python-pyp...@packages.debian.org
Control: affects -1 + src:python-pyppmd
User: ftp.debian....@packages.debian.org
Usertags: remove

Hi ftpmaster,

While adding pybuild test support to python-pyppmd, we noticed
that some encoding and decoding cycles were failing to restore
compressed user data on big-endian architectures, for instance
on s390x[1]:

        _____________________ test_ppmd8_encode_decode[1048576-1] 
______________________
        
        tmp_path = 
PosixPath('/tmp/pytest-of-buildd/pytest-1/test_ppmd8_encode_decode_104851')
        mem_size = 1048576, restore_method = 1
        
            @pytest.mark.parametrize(
                "mem_size, restore_method",
                [
                    (8 << 20, pyppmd.PPMD8_RESTORE_METHOD_RESTART),
                    (8 << 20, pyppmd.PPMD8_RESTORE_METHOD_CUT_OFF),
                    (1 << 20, pyppmd.PPMD8_RESTORE_METHOD_RESTART),
                    (1 << 20, pyppmd.PPMD8_RESTORE_METHOD_CUT_OFF),
                ],
            )
            @pytest.mark.timeout(20)
            def test_ppmd8_encode_decode(tmp_path, mem_size, restore_method):
                length = 0
                m = hashlib.sha256()
                with testdata_path.joinpath("10000SalesRecords.csv").open("rb") 
as f:
                    with tmp_path.joinpath("target.ppmd").open("wb") as target:
                        enc = pyppmd.Ppmd8Encoder(6, mem_size, 
restore_method=restore_method)
                        data = f.read(READ_BLOCKSIZE)
                        while len(data) > 0:
                            m.update(data)
                            length += len(data)
                            target.write(enc.encode(data))
                            data = f.read(READ_BLOCKSIZE)
                        target.write(enc.flush(endmark=True))
                shash = m.digest()
                m2 = hashlib.sha256()
                assert length == 1237262
                length = 0
                with tmp_path.joinpath("target.ppmd").open("rb") as target:
                    with tmp_path.joinpath("target.csv").open("wb") as out:
                        dec = pyppmd.Ppmd8Decoder(6, mem_size, 
restore_method=restore_method)
                        data = target.read(READ_BLOCKSIZE)
                        while not dec.eof:
                            res = dec.decode(data)
                            m2.update(res)
                            out.write(res)
                            length += len(res)
                            if len(data) == 0:
                                break
                            data = target.read(READ_BLOCKSIZE)
        >       assert length == 1237262
        E       assert 1237261 == 1237262
        
        tests/test_ppmd8.py:91: AssertionError

[1]: 
https://buildd.debian.org/status/fetch.php?pkg=python-pyppmd&arch=s390x&ver=1.1.0%2Bds-2&stamp=1714557172&raw=0

If left as is, we suspect the package could corrupt user data
and is is not fit for release on big-endian systems.  It should
be removed from the archive until such configuration is properly
supported.

Please remove python-pyppmd from s390x release architecture.

Have a nice day,  :)
-- 
  .''`.  Étienne Mollier <emoll...@debian.org>
 : :' :  pgp: 8f91 b227 c7d6 f2b1 948c  8236 793c f67e 8f0d 11da
 `. `'   sent from /dev/pts/0, please excuse my verbosity
   `-

Attachment: signature.asc
Description: PGP signature

Reply via email to