Skip to content

Do not query all available image plugins when determining background type

Fushan Wen requested to merge cherry-pick-2f743037 into Plasma/5.26

In order to determine whether the wallpaper is animated or not, MediaProxy::determineBackgroundType uses the following algorithm:

if (QMovie::supportedFormats().contains(QFileInfo(filePath).suffix().toLower().toLatin1())) {

This enumerates all image types that support animations, then checks whether the one we care about is contained in the list.

Unfortunately, to check which image types support animations, QMovie::supportedFormats() needs to instantiate each and every image reader plugin that is available and ask it whether it supports animations.

STEPS TO REPRODUCE

We have caught this in Fedora by accident, because we ran into a bug: https://bugzilla.redhat.com/show_bug.cgi?id=2144200 where Chromium and PDFium would fail to load on Apple hardware using "Apple Silicon" ARM CPUs. This surprisingly lead to the whole Plasma shell failing to start because the QImage PDF reader would crash during initialization, crashing the entire shell along with it. Since image reader plugins can generally be of varying quality, it would be much safer to avoid instantiating less tested exotic plugins when we do not actually need them.

A crash in PDFium can crash the entire Plasma Shell, turning QtPdf into a critical package.

Instead of enumerating all image formats that support animation using QMovie::supportedFormats(), the better way would be to do what QMovie::supportedFormats() does internally, but only on the type we actually care about, without enumerating them.

See also the downstream bug report: https://bugzilla.redhat.com/show_bug.cgi?id=2144200#c22

Co-authored-by: Kevin Kofler kevin.kofler@chello.at

BUG: 462308 FIXED-IN: 5.26.4

(cherry picked from commit 2f743037)

Merge request reports