Bug#1145932: ~/jxl-trigger-clamtk.jxl

Sergi Perich <[email protected]>
Newsgroups gmane.linux.debian.devel.qt-kde
Message-ID <CAEgVuWWpVRR_hBkXh=fcx+14MXHbP+bYEb_hGu6MVKw2T5M2WQ__40906.5976667748$1788183935$gmane$org@mail.gmail.com>
Hello,

Follow-up with further data narrowing this down. Short version: libjxl
decodes the affected files correctly, so the fault appears to be specific
to the icon-engine path in kimageformats rather than to JPEG XL decoding
as such.

SECOND TRIGGER FILE

After removing the first trigger, Discover loaded Home but froze again on
the Installed view, on a different file:

  /var/lib/swcatalog/icons/debian-forky-main/64x64/clamtk_clamtk.jxl

Same signature as before: the file descriptor stays open while the process
is unresponsive at 99% CPU.

  ls -l /proc/22121/fd | grep -i jxl
  lr-x------ 1 ... 13 ->
/var/lib/swcatalog/icons/debian-forky-main/64x64/clamtk_clamtk.jxl

So there are at least four independent trigger files across three systems:
abe_abe.jxl (KDE 524885), video-downloader (this bug, original report),
scite_Sci48M.jxl and clamtk_clamtk.jxl (here). They come from unrelated
packages.

LIBJXL DECODES THEM FINE

djxl from libjxl-tools 0.11.2-5.1, i.e. the same libjxl the plugin links
against, decodes both of my trigger files without any problem:

  for f in scite_Sci48M.jxl clamtk_clamtk.jxl ark_ark.jxl; do
      timeout 10 djxl "$f" /tmp/out.png >/dev/null 2>&1; echo "$? $f"
  done
  0  scite_Sci48M.jxl     (freezes Discover)
  0  clamtk_clamtk.jxl    (freezes Discover)
  0  ark_ark.jxl          (renders fine in Discover)

Exit code 0 in all three cases - no hang, no error. jxlinfo also reads all
of them without issue.

Gwenview opens clamtk_clamtk.jxl and displays it correctly as well.

HEADERS ARE IDENTICAL BETWEEN WORKING AND FAILING FILES

jxlinfo output is byte-for-byte the same description for both the files
that freeze Discover and the ones that render fine:

  JPEG XL image, 64x64, (possibly) lossless, 8-bit RGB+Alpha
  Color space: RGB, D65, sRGB primaries, sRGB transfer function,
  rendering intent: Relative

So dimensions, bit depth, alpha and colour profile do not distinguish the
failing files from the working ones. I also checked whether the trigger
files were ones missing some of the 48x48/64x64/128x128 variants in the
catalogue; several hundred icons are incomplete in that way and most of
them render fine, and video-downloader (the trigger in the original
report) has all three sizes, so that is not the discriminator either.

WHAT THIS POINTS AT

Given that libjxl decodes these files correctly on its own, and Gwenview
displays them correctly, but Discover hangs on them via

  kimg_jxl.so
  QImageReader::size()
  QPixmapIconEngine::bestMatch()
  QPixmapIconEngine::actualSize()
  QIcon::actualSize()
  libKirigamiPrimitives

the problem looks specific to how the plugin behaves when driven from the
icon engine path (size query / bestMatch iteration), not to JXL decoding
in general. That is consistent with the reassignment to
src:kf6-kimageformats rather than src:jpeg-xl.

I am attaching the second trigger file (clamtk_clamtk.jxl, 5061 bytes).
The first one (scite_Sci48M.jxl) is attached to my previous message.

Versions unchanged from my previous message: kimageformat6-plugins
6.28.1-1+b1, libjxl0.11 0.11.2-5.1, Qt 6.10.2, amd64.

Happy to run anything else that would help.

Regards,
Sergi Perich
Soplos Linux
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.