Bug#1078883: diffoscope: FTBFS: failing tests

Santiago Vila sanvila at debian.org
Sat Aug 17 14:39:47 BST 2024


Package: src:diffoscope
Version: 240
Severity: serious
Control: close -1 274
Tags: ftbfs bookworm

Dear maintainer:

During a rebuild of all packages in bookworm, your package failed to build:

--------------------------------------------------------------------------------
[...]
  debian/rules binary
dh binary --with python3 --with bash-completion --buildsystem=pybuild
    dh_update_autotools_config -O--buildsystem=pybuild
    dh_autoreconf -O--buildsystem=pybuild
    dh_auto_configure -O--buildsystem=pybuild
I: pybuild base:240: python3.11 setup.py config
running config
    dh_auto_build -O--buildsystem=pybuild
I: pybuild base:240: /usr/bin/python3 setup.py build
running build
running build_py
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/diffoscope
copying diffoscope/config.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/diffoscope

[... snipped ...]

self       = <zipfile.ZipFile filename='/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip' mode='r'>
zef_file   = <zipfile._SharedFile object at 0x7f3060577e90>
zinfo      = <ZipInfo filename='dir/text' compress_type=deflate filemode='-rw-r--r--' file_size=446 compress_size=269>

/usr/lib/python3.11/zipfile.py:1600: BadZipFile
=================================== FAILURES ===================================
__________________________ test_mozzip_no_differences __________________________

mozzip1 = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>

     def test_mozzip_no_differences(mozzip1):
>       difference = mozzip1.compare(mozzip1)

mozzip1    = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>

tests/comparators/test_zip.py:88:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
diffoscope/comparators/zip.py:217: in compare
     x = super().compare(other, source)
         __class__  = <class 'diffoscope.comparators.zip.ZipFileBase'>
         other      = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>
         self       = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>
         source     = None
diffoscope/comparators/utils/file.py:515: in compare
     difference = self._compare_using_details(other, source)
         other      = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>
         self       = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>
         source     = None
diffoscope/comparators/utils/file.py:450: in _compare_using_details
     details.extend(
         depth      = 1
         details    = [None, None, None]
         difference = <Difference /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip -- /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip []>
         no_recurse = False
         other      = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>
         self       = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>
         source     = None
diffoscope/comparators/utils/container.py:130: in comparisons
     my_members = OrderedDict(self.get_adjusted_members_sizes())
         other      = <diffoscope.comparators.zip.MozillaZipContainer object at 0x7f3066ec6850>
         self       = <diffoscope.comparators.zip.MozillaZipContainer object at 0x7f3066ec6850>
diffoscope/comparators/utils/container.py:126: in get_adjusted_members_sizes
     size = path_apparent_size(member.path)
         member     = <<class 'diffoscope.comparators.utils.archive.ArchiveMember'> dir/text>
         name       = 'dir/text'
         self       = <diffoscope.comparators.zip.MozillaZipContainer object at 0x7f3066ec6850>
diffoscope/comparators/utils/archive.py:114: in path
     self._path = self.container.extract(
         self       = <<class 'diffoscope.comparators.utils.archive.ArchiveMember'> dir/text>
diffoscope/comparators/zip.py:196: in extract
     with self.archive.open(member_name) as source, open(
         dest_dir   = '/tmp/diffoscope_kq5ljc2x_/tmpv1u01aow_MozillaZipContainer'
         member_name = 'dir/text'
         self       = <diffoscope.comparators.zip.MozillaZipContainer object at 0x7f3066ec6850>
         targetpath = b'/tmp/diffoscope_kq5ljc2x_/tmpv1u01aow_MozillaZipContainer/text'
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <zipfile.ZipFile filename='/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip' mode='r'>
name = 'dir/text', mode = 'r', pwd = None

     def open(self, name, mode="r", pwd=None, *, force_zip64=False):
         """Return file-like object for 'name'.
     
         name is a string for the file name within the ZIP file, or a ZipInfo
         object.
     
         mode should be 'r' to read a file already in the ZIP file, or 'w' to
         write to a file newly added to the archive.
     
         pwd is the password to decrypt files (only used for reading).
     
         When writing, if the file size is not known in advance but may exceed
         2 GiB, pass force_zip64 to use the ZIP64 format, which can handle large
         files.  If the size is known in advance, it is best to pass a ZipInfo
         instance for name, with zinfo.file_size set.
         """
         if mode not in {"r", "w"}:
             raise ValueError('open() requires mode "r" or "w"')
         if pwd and (mode == "w"):
             raise ValueError("pwd is only supported for reading files")
         if not self.fp:
             raise ValueError(
                 "Attempt to use ZIP archive that was already closed")
     
         # Make sure we have an info object
         if isinstance(name, ZipInfo):
             # 'name' is already an info object
             zinfo = name
         elif mode == 'w':
             zinfo = ZipInfo(name)
             zinfo.compress_type = self.compression
             zinfo._compresslevel = self.compresslevel
         else:
             # Get info object for name
             zinfo = self.getinfo(name)
     
         if mode == 'w':
             return self._open_to_write(zinfo, force_zip64=force_zip64)
     
         if self._writing:
             raise ValueError("Can't read from the ZIP file while there "
                     "is an open writing handle on it. "
                     "Close the writing handle before trying to read.")
     
         # Open for reading:
         self._fileRefCnt += 1
         zef_file = _SharedFile(self.fp, zinfo.header_offset,
                                self._fpclose, self._lock, lambda: self._writing)
         try:
             # Skip the file header:
             fheader = zef_file.read(sizeFileHeader)
             if len(fheader) != sizeFileHeader:
                 raise BadZipFile("Truncated file header")
             fheader = struct.unpack(structFileHeader, fheader)
             if fheader[_FH_SIGNATURE] != stringFileHeader:
                 raise BadZipFile("Bad magic number for file header")
     
             fname = zef_file.read(fheader[_FH_FILENAME_LENGTH])
             if fheader[_FH_EXTRA_FIELD_LENGTH]:
                 zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])
     
             if zinfo.flag_bits & _MASK_COMPRESSED_PATCH:
                 # Zip 2.7: compressed patched data
                 raise NotImplementedError("compressed patched data (flag bit 5)")
     
             if zinfo.flag_bits & _MASK_STRONG_ENCRYPTION:
                 # strong encryption
                 raise NotImplementedError("strong encryption (flag bit 6)")
     
             if fheader[_FH_GENERAL_PURPOSE_FLAG_BITS] & _MASK_UTF_FILENAME:
                 # UTF-8 filename
                 fname_str = fname.decode("utf-8")
             else:
                 fname_str = fname.decode(self.metadata_encoding or "cp437")
     
             if fname_str != zinfo.orig_filename:
                 raise BadZipFile(
                     'File name in directory %r and header %r differ.'
                     % (zinfo.orig_filename, fname))
     
             if (zinfo._end_offset is not None and
                 zef_file.tell() + zinfo.compress_size > zinfo._end_offset):
>               raise BadZipFile(f"Overlapped entries: {zinfo.orig_filename!r} (possible zip bomb)")
E               zipfile.BadZipFile: Overlapped entries: 'dir/text' (possible zip bomb)

fheader    = (b'PK\x03\x04', 20, 0, 2, 8, 0, 15393, 1139091176, 269, 446, 8, 0)
fname      = b'dir/text'
fname_str  = 'dir/text'
force_zip64 = False
mode       = 'r'
name       = 'dir/text'
pwd        = None
self       = <zipfile.ZipFile filename='/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip' mode='r'>
zef_file   = <zipfile._SharedFile object at 0x7f306f28cd10>
zinfo      = <ZipInfo filename='dir/text' compress_type=deflate filemode='-rw-r--r--' file_size=446 compress_size=269>

/usr/lib/python3.11/zipfile.py:1600: BadZipFile
_______________________ test_mozzip_compare_non_existing _______________________

monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f30646cbd10>
mozzip1 = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>

     @skip_unless_tools_exist("zipinfo")
     def test_mozzip_compare_non_existing(monkeypatch, mozzip1):
>       assert_non_existing(monkeypatch, mozzip1)

monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f30646cbd10>
mozzip1    = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>

tests/comparators/test_zip.py:111:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/utils/nonexisting.py:31: in assert_non_existing
     difference = fixture.compare(MissingFile("/nonexisting", fixture))
         fixture    = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>
         has_details = True
         has_null_source = True
         monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f30646cbd10>
diffoscope/comparators/zip.py:217: in compare
     x = super().compare(other, source)
         __class__  = <class 'diffoscope.comparators.zip.ZipFileBase'>
         other      = <<class 'diffoscope.comparators.missing_file.MissingFile'> /nonexisting>
         self       = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>
         source     = None
diffoscope/comparators/utils/file.py:515: in compare
     difference = self._compare_using_details(other, source)
         other      = <<class 'diffoscope.comparators.missing_file.MissingFile'> /nonexisting>
         self       = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>
         source     = None
diffoscope/comparators/utils/file.py:450: in _compare_using_details
     details.extend(
         depth      = 1
         details    = [<Difference zipinfo {} -- zipinfo {} []>,
  <Difference zipnote «TEMP»/diffoscope_kq5ljc2x_/tmpwtggrr29_.zip -- zipnote «TEMP»/diffoscope_kq5ljc2x_/tmpwtggrr29_.zip []>,
  None,
  <Difference filetype from diffoscope -- filetype from diffoscope []>]
         difference = <Difference /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip -- /nonexisting []>
         no_recurse = False
         other      = <<class 'diffoscope.comparators.missing_file.MissingFile'> /nonexisting>
         self       = <<class 'abc.MozillaZipFile'> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip>
         source     = None
diffoscope/comparators/utils/container.py:130: in comparisons
     my_members = OrderedDict(self.get_adjusted_members_sizes())
         other      = <diffoscope.comparators.utils.archive.MissingArchive object at 0x7f30658f7310>
         self       = <diffoscope.comparators.zip.MozillaZipContainer object at 0x7f30646cae50>
diffoscope/comparators/utils/container.py:126: in get_adjusted_members_sizes
     size = path_apparent_size(member.path)
         member     = <<class 'diffoscope.comparators.utils.archive.ArchiveMember'> dir/text>
         name       = 'dir/text'
         self       = <diffoscope.comparators.zip.MozillaZipContainer object at 0x7f30646cae50>
diffoscope/comparators/utils/archive.py:114: in path
     self._path = self.container.extract(
         self       = <<class 'diffoscope.comparators.utils.archive.ArchiveMember'> dir/text>
diffoscope/comparators/zip.py:196: in extract
     with self.archive.open(member_name) as source, open(
         dest_dir   = '/tmp/diffoscope_kq5ljc2x_/tmpx6_nmw3e_MozillaZipContainer'
         member_name = 'dir/text'
         self       = <diffoscope.comparators.zip.MozillaZipContainer object at 0x7f30646cae50>
         targetpath = b'/tmp/diffoscope_kq5ljc2x_/tmpx6_nmw3e_MozillaZipContainer/text'
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <zipfile.ZipFile filename='/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip' mode='r'>
name = 'dir/text', mode = 'r', pwd = None

     def open(self, name, mode="r", pwd=None, *, force_zip64=False):
         """Return file-like object for 'name'.
     
         name is a string for the file name within the ZIP file, or a ZipInfo
         object.
     
         mode should be 'r' to read a file already in the ZIP file, or 'w' to
         write to a file newly added to the archive.
     
         pwd is the password to decrypt files (only used for reading).
     
         When writing, if the file size is not known in advance but may exceed
         2 GiB, pass force_zip64 to use the ZIP64 format, which can handle large
         files.  If the size is known in advance, it is best to pass a ZipInfo
         instance for name, with zinfo.file_size set.
         """
         if mode not in {"r", "w"}:
             raise ValueError('open() requires mode "r" or "w"')
         if pwd and (mode == "w"):
             raise ValueError("pwd is only supported for reading files")
         if not self.fp:
             raise ValueError(
                 "Attempt to use ZIP archive that was already closed")
     
         # Make sure we have an info object
         if isinstance(name, ZipInfo):
             # 'name' is already an info object
             zinfo = name
         elif mode == 'w':
             zinfo = ZipInfo(name)
             zinfo.compress_type = self.compression
             zinfo._compresslevel = self.compresslevel
         else:
             # Get info object for name
             zinfo = self.getinfo(name)
     
         if mode == 'w':
             return self._open_to_write(zinfo, force_zip64=force_zip64)
     
         if self._writing:
             raise ValueError("Can't read from the ZIP file while there "
                     "is an open writing handle on it. "
                     "Close the writing handle before trying to read.")
     
         # Open for reading:
         self._fileRefCnt += 1
         zef_file = _SharedFile(self.fp, zinfo.header_offset,
                                self._fpclose, self._lock, lambda: self._writing)
         try:
             # Skip the file header:
             fheader = zef_file.read(sizeFileHeader)
             if len(fheader) != sizeFileHeader:
                 raise BadZipFile("Truncated file header")
             fheader = struct.unpack(structFileHeader, fheader)
             if fheader[_FH_SIGNATURE] != stringFileHeader:
                 raise BadZipFile("Bad magic number for file header")
     
             fname = zef_file.read(fheader[_FH_FILENAME_LENGTH])
             if fheader[_FH_EXTRA_FIELD_LENGTH]:
                 zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])
     
             if zinfo.flag_bits & _MASK_COMPRESSED_PATCH:
                 # Zip 2.7: compressed patched data
                 raise NotImplementedError("compressed patched data (flag bit 5)")
     
             if zinfo.flag_bits & _MASK_STRONG_ENCRYPTION:
                 # strong encryption
                 raise NotImplementedError("strong encryption (flag bit 6)")
     
             if fheader[_FH_GENERAL_PURPOSE_FLAG_BITS] & _MASK_UTF_FILENAME:
                 # UTF-8 filename
                 fname_str = fname.decode("utf-8")
             else:
                 fname_str = fname.decode(self.metadata_encoding or "cp437")
     
             if fname_str != zinfo.orig_filename:
                 raise BadZipFile(
                     'File name in directory %r and header %r differ.'
                     % (zinfo.orig_filename, fname))
     
             if (zinfo._end_offset is not None and
                 zef_file.tell() + zinfo.compress_size > zinfo._end_offset):
>               raise BadZipFile(f"Overlapped entries: {zinfo.orig_filename!r} (possible zip bomb)")
E               zipfile.BadZipFile: Overlapped entries: 'dir/text' (possible zip bomb)

fheader    = (b'PK\x03\x04', 20, 0, 2, 8, 0, 15393, 1139091176, 269, 446, 8, 0)
fname      = b'dir/text'
fname_str  = 'dir/text'
force_zip64 = False
mode       = 'r'
name       = 'dir/text'
pwd        = None
self       = <zipfile.ZipFile filename='/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build/tests/data/test1.mozzip' mode='r'>
zef_file   = <zipfile._SharedFile object at 0x7f30658f6d10>
zinfo      = <ZipInfo filename='dir/text' compress_type=deflate filemode='-rw-r--r--' file_size=446 compress_size=269>

/usr/lib/python3.11/zipfile.py:1600: BadZipFile

---------- coverage: platform linux, python 3.11.2-final-0 -----------
Name                                         Stmts   Miss  Cover   Missing
--------------------------------------------------------------------------
diffoscope/__init__.py                           1      0   100%
diffoscope/changes.py                          123     52    58%   84, 92, 95, 104, 111, 118, 139, 176, 182, 188, 194-198, 204, 210, 226-229, 232-235, 244, 256-288, 306-308, 313-316, 323, 335
diffoscope/comparators/__init__.py              47     13    72%   147-153, 158-167
diffoscope/comparators/android.py               43      1    98%   49
diffoscope/comparators/apk.py                  179     27    85%   48-50, 56, 242, 253-256, 259, 271, 278-282, 290, 294-309, 322, 326
diffoscope/comparators/ar.py                    27      0   100%
diffoscope/comparators/arsc.py                  38      0   100%
diffoscope/comparators/berkeley_db.py           20      0   100%
diffoscope/comparators/binary.py                20      0   100%
diffoscope/comparators/binwalk.py               64      8    88%   32-33, 37-39, 74, 101-102
diffoscope/comparators/bzip2.py                 25      0   100%
diffoscope/comparators/cbfs.py                  89      1    99%   166
diffoscope/comparators/cpio.py                  10      0   100%
diffoscope/comparators/deb.py                  126      9    93%   37-39, 52, 77, 136, 189-191
diffoscope/comparators/debian.py               169     12    93%   26-30, 87-89, 116-121, 189, 258-262, 282, 358
diffoscope/comparators/debian_fallback.py       17      0   100%
diffoscope/comparators/decompile.py            192     99    48%   38-39, 58-59, 62-67, 71, 74, 78, 86-97, 101-109, 116, 119, 122, 132-133, 137, 140, 143, 156-159, 165, 169, 175, 178, 181, 184, 187, 193-204, 207-212, 224-231, 234, 241, 245, 249, 253, 257-260, 264-275, 279-284, 307-327, 330, 336, 339, 342-343, 346-347
diffoscope/comparators/device.py                48      6    88%   48-51, 86-89
diffoscope/comparators/dex.py                   53      2    96%   38, 77
diffoscope/comparators/directory.py            159     43    73%   40-43, 98-106, 112-115, 119-143, 173-174, 177, 180-201, 256, 271
diffoscope/comparators/docx.py                  14      0   100%
diffoscope/comparators/dtb.py                   14      0   100%
diffoscope/comparators/elf.py                  347     33    90%   77, 82-83, 221, 236, 243, 341, 385, 407-409, 417, 429-431, 439, 471, 511-520, 528-530, 535, 548, 559, 565, 578-582, 594-599, 688-691
diffoscope/comparators/ffprobe.py               27      0   100%
diffoscope/comparators/fit.py                   57      2    96%   88, 118
diffoscope/comparators/fontconfig.py            27      0   100%
diffoscope/comparators/fonts.py                 27      2    93%   55-56
diffoscope/comparators/fsimage.py               88     20    77%   34-36, 44, 51-52, 59-65, 69-71, 77, 82-83, 87, 132-134
diffoscope/comparators/gettext.py               37      0   100%
diffoscope/comparators/gif.py                   42      4    90%   56-57, 100-101
diffoscope/comparators/git.py                   29      0   100%
diffoscope/comparators/gnumeric.py              19      0   100%
diffoscope/comparators/gzip.py                  27      0   100%
diffoscope/comparators/haskell.py               66     22    67%   37, 85-87, 96, 102-109, 120-145, 148-153
diffoscope/comparators/hdf.py                   14      0   100%
diffoscope/comparators/html.py                  24      2    92%   50-51
diffoscope/comparators/icc.py                   14      0   100%
diffoscope/comparators/image.py                 84      6    93%   135-136, 164-165, 184-185
diffoscope/comparators/ipk.py                    4      0   100%
diffoscope/comparators/iso9660.py               52     20    62%   33, 51, 56-57, 61-68, 71-73, 95, 105-119
diffoscope/comparators/java.py                  51      4    92%   94-97, 106
diffoscope/comparators/javascript.py            13      0   100%
diffoscope/comparators/json.py                  56      9    84%   34-36, 54-55, 86, 95-96, 104
diffoscope/comparators/kbx.py                   18      1    94%   35
diffoscope/comparators/llvm.py                  22      0   100%
diffoscope/comparators/lz4.py                   28      0   100%
diffoscope/comparators/lzip.py                  27      0   100%
diffoscope/comparators/macho.py                305     57    81%   94-96, 100, 104, 107, 111-114, 119, 124, 129, 134, 148-151, 155, 159, 162, 166-169, 174-175, 181, 184-185, 190-191, 213, 324, 328, 332-349, 366, 472, 495, 509-512, 538, 559-562, 582, 586, 625, 637-645
diffoscope/comparators/missing_file.py          55      4    93%   71, 74, 77, 95
diffoscope/comparators/mono.py                  14      0   100%
diffoscope/comparators/ocaml.py                 19      0   100%
diffoscope/comparators/odt.py                   24      3    88%   35, 43-44
diffoscope/comparators/ogg.py                   14      0   100%
diffoscope/comparators/openssh.py               14      0   100%
diffoscope/comparators/openssl.py               26      5    81%   56-68, 71-77
diffoscope/comparators/pcap.py                  14      0   100%
diffoscope/comparators/pdf.py                  104     24    77%   43-45, 53-62, 67-77, 113-120, 148, 178-180
diffoscope/comparators/pe32.py                  18      5    72%   31, 41-44, 52
diffoscope/comparators/pgp.py                   59     13    78%   55-72, 75, 79, 82, 103-104, 110-112
diffoscope/comparators/png.py                   32      2    94%   78-79
diffoscope/comparators/ppu.py                   57     16    72%   73, 85-98, 101-107
diffoscope/comparators/ps.py                    25      2    92%   50-51
diffoscope/comparators/python.py                67     43    36%   48-60, 64-65, 69-82, 86-117, 121-129, 133
diffoscope/comparators/rdata.py                 58      4    93%   93, 104, 108, 170
diffoscope/comparators/rpm.py                   73      1    99%   42
diffoscope/comparators/rpm_fallback.py          12      0   100%
diffoscope/comparators/rust.py                  32      0   100%
diffoscope/comparators/socket_or_fifo.py        52     10    81%   45-63, 101
diffoscope/comparators/sphinx.py                23      2    91%   61-65
diffoscope/comparators/sqlite.py                14      0   100%
diffoscope/comparators/squashfs.py             204     34    83%   102, 120, 134, 142, 145, 159, 167, 193-194, 198-199, 205-206, 221, 235-247, 250-251, 254, 257, 286-287, 344, 360-362
diffoscope/comparators/symlink.py               35      2    94%   58-59
diffoscope/comparators/tar.py                   12      0   100%
diffoscope/comparators/text.py                  27      2    93%   69-71
diffoscope/comparators/uimage.py                24      0   100%
diffoscope/comparators/utils/__init__.py         0      0   100%
diffoscope/comparators/utils/archive.py        102     14    86%   67, 71, 75, 79, 125-126, 145, 148, 151, 160, 163, 170, 173, 178
diffoscope/comparators/utils/command.py         56      3    95%   63, 77, 105
diffoscope/comparators/utils/compare.py        101     13    87%   77, 85, 105, 124-125, 141, 160-168
diffoscope/comparators/utils/container.py      125     11    91%   66, 70, 115-119, 192-195, 211
diffoscope/comparators/utils/file.py           298     53    82%   39-40, 53-59, 80-94, 122, 296-297, 346-348, 358-360, 368, 372, 376, 380, 445-448, 473-476, 490-493, 501, 505-509, 538, 549-562, 581, 588, 611
diffoscope/comparators/utils/fuzzy.py           33      2    94%   27-28
diffoscope/comparators/utils/libarchive.py     197     32    84%   47-50, 54-57, 69-72, 76-79, 83-86, 134-137, 176, 208, 216, 219, 232, 246, 251-252, 255, 258, 272-273, 304, 347-348, 371-387
diffoscope/comparators/utils/operation.py       26      6    77%   33, 40, 48, 55, 62, 66
diffoscope/comparators/utils/specialize.py      32      2    94%   78, 81
diffoscope/comparators/vmlinuz.py               28      9    68%   35, 38, 41, 45-59
diffoscope/comparators/wasm.py                  19      0   100%
diffoscope/comparators/xml.py                   52      3    94%   69, 156-157
diffoscope/comparators/xmlb.py                  19      3    84%   31, 43, 46
diffoscope/comparators/xsb.py                   17      0   100%
diffoscope/comparators/xz.py                    28      0   100%
diffoscope/comparators/zip.py                  158      5    97%   171, 174, 206, 258-259
diffoscope/comparators/zst.py                   26      0   100%
diffoscope/config.py                            50      4    92%   83-98
diffoscope/diff.py                             435     60    86%   103, 140, 199, 237, 239, 283-286, 299-327, 409, 555-560, 579-580, 591, 608, 610, 614, 630, 635, 668-669, 672-673, 695-696, 699-709, 717-720, 730-733, 748
diffoscope/difference.py                       232     17    93%   116, 226-230, 249, 284, 291-292, 311, 346-349, 380, 396, 402, 457
diffoscope/environ.py                           13      0   100%
diffoscope/exc.py                               21      0   100%
diffoscope/excludes.py                          24      5    79%   31-36, 43-45
diffoscope/external_tools.py                     5      0   100%
diffoscope/feeders.py                           83      3    96%   36, 116-117
diffoscope/logging.py                           28      4    86%   29-30, 35-36
diffoscope/main.py                             281     67    76%   59-61, 65-67, 73, 450, 458-465, 477-481, 529, 569-614, 631, 686, 700-701, 723, 730-734, 739, 744-752, 770, 772-775, 780-786, 804
diffoscope/path.py                              15      2    87%   30-31
diffoscope/presenters/__init__.py                0      0   100%
diffoscope/presenters/formats.py                43      4    91%   99-102
diffoscope/presenters/html/__init__.py           1      0   100%
diffoscope/presenters/html/html.py             473    125    74%   82-89, 143-146, 150, 152-154, 268-269, 272, 307, 331, 348-359, 418, 429, 442-446, 451, 458-465, 476, 481-493, 496-511, 542-545, 549-554, 557, 563-567, 592-601, 606-618, 623-637, 652, 672-675, 750, 752, 816, 832, 843-875, 893
diffoscope/presenters/html/templates.py         11      0   100%
diffoscope/presenters/icon.py                    1      0   100%
diffoscope/presenters/json.py                   32      1    97%   55
diffoscope/presenters/markdown.py               21      0   100%
diffoscope/presenters/restructuredtext.py       25      0   100%
diffoscope/presenters/text.py                   44      7    84%   61-66, 71-72, 81-82
diffoscope/presenters/utils.py                 166     14    92%   42, 71, 153, 158, 165, 307, 343, 354, 357, 422-427
diffoscope/profiling.py                         47      3    94%   70-72
diffoscope/progress.py                         168     18    89%   34-36, 45-52, 78, 89-90, 95, 120, 225, 240-241, 249
diffoscope/readers/__init__.py                   9      0   100%
diffoscope/readers/json.py                      17      1    94%   34
diffoscope/readers/utils.py                      2      0   100%
diffoscope/tempfiles.py                         57      9    84%   83-84, 99-105, 123-124
diffoscope/tools.py                             93     13    86%   26-27, 98-99, 109-110, 149, 162, 167, 182-185
diffoscope/utils.py                             38      1    97%   45
--------------------------------------------------------------------------
TOTAL                                         7843   1141    85%
Coverage HTML written to dir htmlcov

=========================== short test summary info ============================
SKIPPED [1] tests/comparators/test_berkeley_db.py:64: requires  >= 6.0 (5.3.28 detected)
SKIPPED [1] tests/comparators/test_dex.py:89: requires  min 9.0.4 >= 14.0 (17.0.11 detected)
SKIPPED [1] tests/comparators/test_elf_decompiler.py:78: radare2 didn't recognize pdgj command
SKIPPED [1] tests/comparators/test_elf_decompiler.py:88: radare2 didn't recognize pdgj command
SKIPPED [1] tests/comparators/test_elf_decompiler.py:98: requires r2pipe Python module
SKIPPED [1] tests/comparators/test_iso9660.py:53: requires isoinfo (try installing genisoimage)
SKIPPED [1] tests/comparators/test_iso9660.py:62: requires isoinfo (try installing genisoimage)
SKIPPED [1] tests/comparators/test_iso9660.py:71: requires isoinfo (try installing genisoimage)
SKIPPED [1] tests/comparators/test_iso9660.py:78: requires isoinfo (try installing genisoimage)
SKIPPED [1] tests/comparators/test_iso9660.py:86: requires isoinfo (try installing genisoimage)
SKIPPED [1] tests/comparators/test_java.py:86: requires  min 9.0.4 >= 14.0 (17.0.11 detected)
SKIPPED [1] tests/comparators/test_macho.py:59: requires otool and lipo
SKIPPED [1] tests/comparators/test_macho.py:67: requires otool and lipo
SKIPPED [1] tests/comparators/test_macho_decompiler.py:86: radare2 didn't recognize pdgj command
SKIPPED [1] tests/comparators/test_macho_decompiler.py:96: radare2 didn't recognize pdgj command
SKIPPED [1] tests/comparators/test_macho_decompiler.py:109: requires r2pipe Python module
SKIPPED [1] tests/comparators/test_odt.py:55: requires  >= 0.7 (0.5 detected)
SKIPPED [1] tests/comparators/test_odt.py:60: requires  >= 0.7 (0.5 detected)
SKIPPED [1] tests/comparators/test_python.py:41: Unstable on 3.10+
SKIPPED [1] tests/comparators/test_python.py:54: Only Python 3.9 and 3.10 can de-marshal test1.pyc-renamed
SKIPPED [1] tests/comparators/test_utils.py:49: requires
SKIPPED [1] tests/comparators/test_utils.py:54: requires /missing
XFAIL tests/comparators/test_apk.py::test_android_manifest
== 2 failed, 688 passed, 22 skipped, 1 xfailed, 2 errors in 185.35s (0:03:05) ==
E: pybuild pybuild:388: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build; python3.11 -m pytest -vv -r sxX -l --cov=diffoscope --cov-report=term-missing --cov-report=html
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13
make: *** [debian/rules:35: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------

The above is just how the build ends and not necessarily the most relevant part.
If required, the full build log is available here:

https://people.debian.org/~sanvila/build-logs/bookworm/

About the archive rebuild: The build was made on virtual machines
of type m6a.large and r6a.large from AWS, using sbuild and a
reduced chroot with only build-essential packages.

If you could not reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and affects, so that this is still visible in the BTS web
page for this package.

Thanks.



More information about the Reproducible-builds mailing list