------- Comment From i...@de.ibm.com 2024-10-07 10:58 EDT-------
I've extracted the compression logic into a stand-alone script, and it doesn't 
fail:

#!/usr/bin/env python3
import gzip
import struct
import zlib

value = b"ABABABABABABABABABAB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Z"
compressed = b"\037\213\010\010\000\000\000\000\002\377File\000"
bc = zlib.compressobj(6, zlib.DEFLATED, -zlib.MAX_WBITS, zlib.DEF_MEM_LEVEL, 0)
compressed += bc.compress(value)
compressed += bc.flush()
compressed += struct.pack("<L", zlib.crc32(value) & 0xFFFFFFFF)
compressed += struct.pack("<L", len(value) & 0xFFFFFFFF)
print(compressed)
assert gzip.decompress(compressed) == value

I think the problem is rather here:

@staticmethod
def _write_binary_item_base64_encoded(
[...]
for chunk in chunks:
file.write(b"\n ")
file.write(base64.b64encode(chunk))

Example:

>>> base64.b64decode(base64.b64encode(b"a")+base64.b64encode(b"b"))
b'a'

Sometimes this works though:

>>> base64.b64decode(base64.b64encode(b"aaa")+base64.b64encode(b"b"))
b'aaab'

Seems like s390x was unlucky and hit the problematic case. I would
suggest to call b64decode() on each line individually.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to apport in Ubuntu.
https://bugs.launchpad.net/bugs/2076269

Title:
  invalid base64 encoded gzip data on s390x causes autopkgtest failures

Status in Ubuntu on IBM z Systems:
  New
Status in apport package in Ubuntu:
  New
Status in python3.12 package in Ubuntu:
  New

Bug description:
  The following tests all fail with an encoding/decoding issue:

  tests/unit/test_problem_report.py::T:test_modify
  
tests/unit/test_report.py::T::test_report_from_systemd_coredump_storage_journal
  tests/integration/test_problem_report::T::test_write_file

  Example failure:

  564s =================================== FAILURES 
===================================
  564s ________________________________ T.test_modify 
_________________________________
  564s
  564s self = <tests.unit.test_problem_report.T testMethod=test_modify>
  564s
  564s     def test_modify(self):
  564s         """reading, modifying fields, and writing back."""
  564s         report = textwrap.dedent(
  564s             """\
  564s             ProblemType: Crash
  564s             Date: now!
  564s             Long:
  564s              xxx
  564s              .
  564s              yyy
  564s             Short: Bar
  564s             File: base64
  564s              H4sICAAAAAAC/0ZpbGUA
  564s              c3RyxIAMcBAFAK/2p9MfAAAA
  564s             """
  564s         ).encode()
  564s
  564s         pr = problem_report.ProblemReport()
  564s         pr.load(io.BytesIO(report))
  564s
  564s         self.assertEqual(pr["Long"], "xxx\n.\nyyy")
  564s
  564s         # write back unmodified
  564s         out = io.BytesIO()
  564s         pr.write(out)
  564s >       self.assertEqual(out.getvalue(), report)
  564s E       AssertionError: b'Pro[73 chars]e64\n H4sICAAAAAAC/0ZpbGUA\n 
cnTChAxwEA==\n BRgAr/an0x8AAAA=\n' != b'Pro[73 chars]e64\n 
H4sICAAAAAAC/0ZpbGUA\n c3RyxIAMcBAFAK/2p9MfAAAA\n'
  564s
  564s tests/unit/test_problem_report.py:509: AssertionError

  Autopkgtest noble log: 
https://autopkgtest.ubuntu.com/results/autopkgtest-noble/noble/s390x/a/apport/20240807_023039_8850a@/log.gz
  oracular log: 
https://autopkgtest.ubuntu.com/results/autopkgtest-oracular/oracular/s390x/a/apport/20240805_132135_d3a80@/log.gz

  This failure was seen on noble (log above) but also on oracular.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-z-systems/+bug/2076269/+subscriptions


-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to