Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 14 additions & 7 deletions panels/dock/taskmanager/x11preview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -391,7 +391,7 @@ X11WindowPreviewContainer::X11WindowPreviewContainer(X11WindowMonitor *monitor,
if (iconData.toString().isEmpty()) {
iconData = enter.data(TaskManager::IconNameRole);
}
updatePreviewIconFromBase64(iconData.toString());
updatePreviewIconFromString(iconData.toString());
updatePreviewTitle(enter.data(TaskManager::WinTitleRole).toString());
});
}
Expand Down Expand Up @@ -463,7 +463,7 @@ void X11WindowPreviewContainer::showPreviewWithModel(QAbstractItemModel *sourceM
if (iconData.toString().isEmpty()) {
iconData = firstIndex.data(TaskManager::IconNameRole);
}
updatePreviewIconFromBase64(iconData.toString());
updatePreviewIconFromString(iconData.toString());
updatePreviewTitle(firstIndex.data(TaskManager::WinTitleRole).toString());
updateSize(sourceModel->rowCount());
} else {
Expand Down Expand Up @@ -761,17 +761,24 @@ bool X11WindowPreviewContainer::eventFilter(QObject *watched, QEvent *event)
return false;
}

void X11WindowPreviewContainer::updatePreviewIconFromBase64(const QString &base64Data)
void X11WindowPreviewContainer::updatePreviewIconFromString(const QString &stringData)
{
const QStringList strs = base64Data.split("base64,");
QPixmap pix;
const QStringList strs = stringData.split("base64,");
if (strs.size() == 2) {
// is base64 image data
pix.loadFromData(QByteArray::fromBase64(strs.at(1).toLatin1()));
} else {
// is (likely) icon name from theme
pix = QIcon::fromTheme(stringData).pixmap(PREVIEW_TITLE_HEIGHT, PREVIEW_TITLE_HEIGHT);
}
Comment on lines 766 to 774
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Splitting on 'base64,' may not handle malformed or unexpected input robustly.

If 'base64,' is missing or appears multiple times, the split may not work as intended. Input validation or a more reliable parsing method is recommended.

Suggested change
QPixmap pix;
const QStringList strs = stringData.split("base64,");
if (strs.size() == 2) {
// is base64 image data
pix.loadFromData(QByteArray::fromBase64(strs.at(1).toLatin1()));
} else {
// is (likely) icon name from theme
pix = QIcon::fromTheme(stringData).pixmap(PREVIEW_TITLE_HEIGHT, PREVIEW_TITLE_HEIGHT);
}
QPixmap pix;
int base64Idx = stringData.indexOf("base64,");
if (base64Idx != -1) {
QString base64Part = stringData.mid(base64Idx + 7); // 7 = length of "base64,"
if (!base64Part.isEmpty()) {
QByteArray decoded = QByteArray::fromBase64(base64Part.toLatin1());
if (!decoded.isEmpty() && pix.loadFromData(decoded)) {
// Successfully loaded base64 image data
} else {
// Malformed base64 or failed to load, fallback to icon theme
pix = QIcon::fromTheme(stringData).pixmap(PREVIEW_TITLE_HEIGHT, PREVIEW_TITLE_HEIGHT);
}
} else {
// Empty base64 part, fallback to icon theme
pix = QIcon::fromTheme(stringData).pixmap(PREVIEW_TITLE_HEIGHT, PREVIEW_TITLE_HEIGHT);
}
} else {
// "base64," not found, treat as icon name from theme
pix = QIcon::fromTheme(stringData).pixmap(PREVIEW_TITLE_HEIGHT, PREVIEW_TITLE_HEIGHT);
}


if (!pix.isNull()) {
m_previewIcon->setPixmap(pix);
return;
if (pix.isNull()) {
qCInfo(x11WindowPreview) << "Cannot load icon from string data:" << stringData;
pix = QPixmap(PREVIEW_TITLE_HEIGHT, PREVIEW_TITLE_HEIGHT);
pix.fill(Qt::transparent);
}

m_previewIcon->setPixmap(pix);
}
}
2 changes: 1 addition & 1 deletion panels/dock/taskmanager/x11preview.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,9 @@
inline void updatePreviewTitle(const QString& title);
inline void initUI();
inline void updateSize(int windowCount = -1);
void updatePreviewIconFromBase64(const QString &base64Data);
void updatePreviewIconFromString(const QString &stringData);

public Q_SLOTS:

Check warning on line 88 in panels/dock/taskmanager/x11preview.h

View workflow job for this annotation

GitHub Actions / cppcheck

There is an unknown macro here somewhere. Configuration is required. If Q_SLOTS is a macro then please configure it.
void updatePosition();

private Q_SLOTS:
Expand Down