Bug#1120867: diffoscope: FTBFS in trixie

Santiago Vila sanvila at debian.org
Mon Nov 17 18:50:18 GMT 2025


Package: src:diffoscope
Version: 297
Severity: serious
Control: fixed -1 308
Tags: ftbfs trixie

Dear maintainer:

During a rebuild of all packages in trixie, this package failed to build.

[ Note: The bug is marked as fixed with the version in forky/sid, but
  packages in trixie must still build in trixie ].

Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:

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

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

If you cannot 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 add an affects on src:diffoscope, so that this is still
visible in the BTS web page for this package.

Thanks.

--------------------------------------------------------------------------------
[...]

differences = [<Difference ukify inspect {} -- ukify inspect {} []>]

    @skip_unless_tools_exist("objdump")
    @skip_unless_tools_exist("ukify")
    def test_diff(differences):
>       assert_diff(differences[0], "uki_expected_diff")

differences = [<Difference ukify inspect {} -- ukify inspect {} []>]

tests/comparators/test_uki.py:81: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

difference = <Difference ukify inspect {} -- ukify inspect {} []>
filename = 'uki_expected_diff'

    def assert_diff(difference, filename):
        # Assign seen and expected values to local variables to improve contextual
        # information in failed tests.
        seen = difference.unified_diff
        expected = get_data(filename)
>       assert seen == expected
E       AssertionError

difference = <Difference ukify inspect {} -- ukify inspect {} []>
expected   = ('@@ -4,19 +4,19 @@\n'
 '   text:\n'
 '     sbat,1,SBAT '
 'Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md\n'
 '     systemd-stub,1,The systemd Developers,systemd,257,https://systemd.io/\n'
 '     systemd-stub.fedora,1,Fedora '
 'Linux,systemd,257~devel-g8dc40c2^,https://bugzilla.redhat.com/\n'
 '     '
 'uki,1,UKI,uki,1,https://uapi-group.org/specifications/specs/unified_kernel_image/\n'
 '     \x00\n'
 ' .osrel:\n'
 '-  size: 4 bytes\n'
 '-  sha256: 890cabe271136403326f8252c59cfdd47160fa63fe7a37801d3bffc1dbbf03f3\n'
 '+  size: 6 bytes\n'
 '+  sha256: 81d93757457f988523814ae0009837ae893f38d3fe123f2c37896f118b4c7804\n'
 '   text:\n'
 '-    arch\n'
 '+    debian\n'
 ' .uname:\n'
 '   size: 4 bytes\n'
 '-  sha256: 49b513c0cc7f8b9f7e64c436a8eee1548b2cf5f907f4345992013a5662550942\n'
 '+  sha256: e4d86b820871b1f065479509c0993f26763118991aa84a9b33c6027d209729d7\n'
 '   text:\n'
 '-    6.11\n'
 '+    6.12\n'
 ' .linux:\n'
 '   size: 6 bytes\n'
 '   sha256: '
 '6923dd1bc0460082c5d55a831908c24a282860b7f1cd6c2b79cf1bc8857c639c\n')
filename   = 'uki_expected_diff'
seen       = ('@@ -3,19 +3,19 @@\n'
 '   sha256: 9615341509c2d7a91172e8faab9216d139506451db4f1850d37325d0a14b1ea0\n'
 '   text:\n'
 '     sbat,1,SBAT '
 'Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md\n'
 '     systemd-stub,1,The systemd Developers,systemd,257,https://systemd.io/\n'
 '     systemd-stub.fedora,1,Fedora '
 'Linux,systemd,257~devel-g8dc40c2^,https://bugzilla.redhat.com/\n'
 '     '
 'uki,1,UKI,uki,1,https://uapi-group.org/specifications/specs/unified_kernel_image/\n'
 ' .osrel:\n'
 '-  size: 4 bytes\n'
 '-  sha256: 890cabe271136403326f8252c59cfdd47160fa63fe7a37801d3bffc1dbbf03f3\n'
 '+  size: 6 bytes\n'
 '+  sha256: 81d93757457f988523814ae0009837ae893f38d3fe123f2c37896f118b4c7804\n'
 '   text:\n'
 '-    arch\n'
 '+    debian\n'
 ' .uname:\n'
 '   size: 4 bytes\n'
 '-  sha256: 49b513c0cc7f8b9f7e64c436a8eee1548b2cf5f907f4345992013a5662550942\n'
 '+  sha256: e4d86b820871b1f065479509c0993f26763118991aa84a9b33c6027d209729d7\n'
 '   text:\n'
 '-    6.11\n'
 '+    6.12\n'
 ' .linux:\n'
 '   size: 6 bytes\n'
 '   sha256: '
 '6923dd1bc0460082c5d55a831908c24a282860b7f1cd6c2b79cf1bc8857c639c\n')

tests/utils/data.py:64: AssertionError
---------------------------- Captured stderr setup -----------------------------
/tmp/pytest-of-sbuild/pytest-0/test_diff2/linux1 is not a valid PE file and cannot be decompressed either
/tmp/pytest-of-sbuild/pytest-0/test_diff2/linux1 is not a valid PE file, not extracting SBAT section.
.linux in /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/tests/data/dummyx64.efi.stub is not a valid PE, ignoring
Wrote unsigned linux1.unsigned.efi
/tmp/pytest-of-sbuild/pytest-0/test_diff2/linux2 is not a valid PE file and cannot be decompressed either
/tmp/pytest-of-sbuild/pytest-0/test_diff2/linux2 is not a valid PE file, not extracting SBAT section.
.linux in /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/tests/data/dummyx64.efi.stub is not a valid PE, ignoring
Wrote unsigned linux2.unsigned.efi
=================================== XPASSES ====================================

---------- coverage: platform linux, python 3.13.5-final-0 -----------
Name                                         Stmts   Miss  Cover   Missing
--------------------------------------------------------------------------
diffoscope/__init__.py                           1      0   100%
diffoscope/changes.py                          122     52    57%   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%   153-159, 164-173
diffoscope/comparators/android.py               43      1    98%   49
diffoscope/comparators/apk.py                  186    110    41%   58, 63-144, 147, 152-154, 157, 160, 163-168, 171, 174-201, 204-210, 252, 263-266, 273-281, 288-292, 300, 304-319, 323-338, 342-356
diffoscope/comparators/ar.py                    27      0   100%
diffoscope/comparators/arsc.py                  38     15    61%   101, 112-113, 129-140
diffoscope/comparators/asar.py                  34     15    56%   38-65, 68, 73, 78
diffoscope/comparators/berkeley_db.py           20      0   100%
diffoscope/comparators/binary.py                20      0   100%
diffoscope/comparators/binwalk.py               65      9    86%   35-36, 40-42, 80-81, 105-106
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               173     13    92%   26-30, 49, 96-98, 125-130, 198, 267-271, 291, 367
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     14    74%   38, 70-75, 90, 94-106
diffoscope/comparators/directory.py            162     43    73%   41-44, 103-111, 117-120, 124-148, 178-179, 182, 185-206, 261, 276
diffoscope/comparators/docx.py                  14      0   100%
diffoscope/comparators/dtb.py                   14      0   100%
diffoscope/comparators/elf.py                  352     41    88%   73, 78-79, 175-177, 218, 233, 240, 324, 327, 330, 338, 382, 404-406, 414, 426-428, 436, 468, 508-517, 522-523, 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               86     18    79%   34-36, 44, 51-52, 59-65, 69-71, 77, 82-83, 87, 132
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     23    65%   37, 47, 85-87, 96, 102-109, 120-145, 155, 158
diffoscope/comparators/hdf.py                   14      0   100%
diffoscope/comparators/html.py                  27      4    85%   51-54
diffoscope/comparators/icc.py                   14      0   100%
diffoscope/comparators/image.py                 83      9    89%   131-132, 148-161, 180-181
diffoscope/comparators/ipk.py                    4      0   100%
diffoscope/comparators/iso9660.py               49     19    61%   34, 39-40, 44-51, 54-56, 78, 88-102
diffoscope/comparators/java.py                  51      4    92%   42, 45-47
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/lzma.py                  25      0   100%
diffoscope/comparators/macho.py                305     60    80%   65, 68, 71, 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               33      9    73%   60-79, 82-88
diffoscope/comparators/pcap.py                  14      0   100%
diffoscope/comparators/pdf.py                  104     26    75%   43-45, 53-62, 67-77, 115-122, 141, 150, 178-182
diffoscope/comparators/pe32.py                  18      5    72%   31, 41-44, 52
diffoscope/comparators/pgp.py                   65      5    92%   84, 115-116, 122-124
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                46      5    89%   56-58, 69-70
diffoscope/comparators/rdata.py                 69      9    87%   93, 101-104, 109-112, 116, 189
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/sevenz.py                52      5    90%   63-64, 75, 98-99
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               33      2    94%   55-56
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/uki.py                   29      3    90%   50, 57-58
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         60      3    95%   66, 80, 108
diffoscope/comparators/utils/compare.py        103     13    87%   82, 90, 110, 128-129, 145, 164-172
diffoscope/comparators/utils/container.py      131     13    90%   66, 70, 115-119, 196-199, 206-207, 219
diffoscope/comparators/utils/file.py           314     51    84%   39-40, 53-59, 80-99, 127, 133, 307-308, 363-365, 373-375, 379-381, 389, 393, 397, 401, 466-469, 511-514, 570-583, 602, 609, 632
diffoscope/comparators/utils/fuzzy.py           33      2    94%   27-28
diffoscope/comparators/utils/libarchive.py     201     37    82%   47-50, 54-57, 69-72, 76-79, 83-86, 90-93, 97-100, 137, 149-152, 187, 219, 227, 230, 243, 257, 262-263, 266, 269, 283-284, 315, 358-359, 382-398
diffoscope/comparators/utils/operation.py       26      6    77%   33, 40, 48, 55, 62, 66
diffoscope/comparators/utils/specialize.py      40      2    95%   108, 111
diffoscope/comparators/vmlinuz.py               28      9    68%   35, 38, 41, 45-59
diffoscope/comparators/wasm.py                  19      0   100%
diffoscope/comparators/xar.py                   68     45    34%   33-35, 38, 41, 44-65, 68-84, 98-100, 119-174
diffoscope/comparators/xml.py                   65      6    91%   44, 66, 101, 143, 195-196
diffoscope/comparators/xmlb.py                  19      3    84%   31, 43, 46
diffoscope/comparators/xsb.py                   17      0   100%
diffoscope/comparators/xz.py                    45      0   100%
diffoscope/comparators/zip.py                  199     11    94%   151, 174, 193, 196, 208, 233, 239, 291, 293, 307-308
diffoscope/comparators/zst.py                   26      0   100%
diffoscope/config.py                            50      4    92%   83-98
diffoscope/diff.py                             437     60    86%   103, 140, 199, 237, 239, 283-286, 299-327, 409, 555-560, 579-580, 591, 608, 610, 614, 630, 635, 669-670, 673-674, 697-698, 701-711, 719-722, 732-735, 750
diffoscope/difference.py                       233     17    93%   116, 226-230, 249, 284, 291-292, 311, 346-349, 380, 396, 402, 466
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                     4      0   100%
diffoscope/feeders.py                           83      3    96%   36, 116-117
diffoscope/logging.py                           28      4    86%   29-30, 35-36
diffoscope/main.py                             293     71    76%   61-63, 67-69, 75, 452, 460-467, 479-483, 531, 571-616, 633, 688, 702-703, 725, 732-736, 743-744, 749, 754-762, 783, 785-788, 790-791, 796-802, 820
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, 310, 346, 357, 360, 425-430
diffoscope/profiling.py                         47      3    94%   70-72
diffoscope/progress.py                         182     21    88%   34-36, 45-52, 78, 89-90, 95, 120, 211, 230, 253-254, 265, 292-293
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                             97     16    84%   26-27, 98-99, 109-110, 149, 162, 167, 182-185, 195-198
diffoscope/utils.py                             40      3    92%   45, 79-80
--------------------------------------------------------------------------
TOTAL                                         8213   1326    84%
Coverage HTML written to dir htmlcov

=========================== short test summary info ============================
SKIPPED [1] tests/comparators/test_apk.py:62: requires apktool; try installing apktool
SKIPPED [1] tests/comparators/test_apk.py:67: requires apktool; try installing apktool
SKIPPED [1] tests/comparators/test_apk.py:74: requires apktool; try installing apktool
SKIPPED [1] tests/comparators/test_apk.py:86: requires apktool; try installing apktool
SKIPPED [1] tests/comparators/test_apk.py:92: requires apktool; try installing apktool
SKIPPED [1] tests/comparators/test_apk.py:111: requires apktool; try installing apktool
SKIPPED [1] tests/comparators/test_arsc.py:54: requires aapt2; try installing aapt
SKIPPED [1] tests/comparators/test_arsc.py:61: requires aapt2; try installing aapt
SKIPPED [1] tests/comparators/test_asar.py:49: requires asar
SKIPPED [1] tests/comparators/test_berkeley_db.py:64: requires db_dump; try installing db-util >= 6.0; 5.3.28 detected
SKIPPED [1] tests/comparators/test_dex.py:89: requires javap; try installing default-jdk-headless | default-jdk | java-sdk min 9.0.4 >= 14.0; 21.0.9 detected
SKIPPED [1] tests/comparators/test_dex.py:97: requires dexdump; try installing dexdump and procyon; try installing procyon-decompiler
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_haskell.py:35: mismatch between system ghc and fixture
SKIPPED [1] tests/comparators/test_haskell.py:52: mismatch between system ghc and fixture
SKIPPED [1] tests/comparators/test_ico_image.py:62: requires identify; try installing imagemagick min 6.9.10-23 >= 7.0.0; 7.1.1-43 detected
SKIPPED [1] tests/comparators/test_ico_image.py:70: requires identify; try installing imagemagick min 6.9.10-23 >= 7.0.0; 7.1.1-43 detected
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:81: requires procyon; try installing procyon-decompiler
SKIPPED [1] tests/comparators/test_java.py:86: requires javap; try installing default-jdk-headless | default-jdk | java-sdk min 9.0.4 >= 14.0; 21.0.9 detected
SKIPPED [1] tests/comparators/test_java.py:102: requires procyon; try installing procyon-decompiler
SKIPPED [1] tests/comparators/test_jpeg_image.py:77: requires identify; try installing imagemagick min 6.9.6 >= 7.0.0; 7.1.1-43 detected
SKIPPED [1] tests/comparators/test_jpeg_image.py:85: requires convert; try installing imagemagick min 6.9.6 >= 7.0.0; 7.1.1-43 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_openssh_pub_key.py:76: requires ssh-keygen; try installing openssh-client <= 9.7p1; 10.0p2 detected
SKIPPED [1] tests/comparators/test_pdf.py:88: pypdf not installed or not version 3.x+
SKIPPED [1] tests/comparators/test_pdf.py:101: pypdf not installed or not version 3.x+
SKIPPED [1] tests/comparators/test_utils.py:49: Skipped
SKIPPED [1] tests/comparators/test_utils.py:54: requires /missing
SKIPPED [1] tests/test_quines.py:57: requires file; try installing file >= 5.47; 5.46 detected
XPASS tests/comparators/test_dex.py::test_compare_non_existing
======= 1 failed, 746 passed, 40 skipped, 1 xpassed in 133.22s (0:02:13) =======
E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build; python3.13 -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.13 returned exit code 13
make: *** [debian/rules:35: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------



More information about the Reproducible-builds mailing list