Skip to content
Merged
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
6 changes: 4 additions & 2 deletions frame/qmlengine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,13 @@ class DQmlEnginePrivate : public DObjectPrivate
QObject::connect(s_engine, &QQmlEngine::quit, qApp, &QCoreApplication::quit);
auto paths = s_engine->importPathList();
// high priority for builtin plugin.
paths.prepend(DDE_SHELL_QML_INSTALL_DIR);
if (!paths.contains(DDE_SHELL_QML_INSTALL_DIR))
paths.prepend(DDE_SHELL_QML_INSTALL_DIR);
const QString rootDir = QCoreApplication::applicationDirPath();
QDir pluginDir(rootDir);
if (pluginDir.cd("../plugins")) {
paths.prepend(pluginDir.absolutePath());
if (!paths.contains(pluginDir.absolutePath()))
paths.prepend(pluginDir.absolutePath());
}
Comment on lines 45 to 49
Copy link

Choose a reason for hiding this comment

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

suggestion (bug_risk): Absolute path comparison may not account for symbolic links or path normalization.

Consider using canonicalPath() or normalizing paths before comparison to prevent duplicate entries due to symbolic links or differing path formats.

Suggested change
QDir pluginDir(rootDir);
if (pluginDir.cd("../plugins")) {
paths.prepend(pluginDir.absolutePath());
if (!paths.contains(pluginDir.absolutePath()))
paths.prepend(pluginDir.absolutePath());
}
QDir pluginDir(rootDir);
if (pluginDir.cd("../plugins")) {
QString pluginCanonicalPath = pluginDir.canonicalPath();
QStringList canonicalPaths;
for (const QString &path : paths) {
QDir dir(path);
canonicalPaths << dir.canonicalPath();
}
if (!canonicalPaths.contains(pluginCanonicalPath))
paths.prepend(pluginCanonicalPath);
}

s_engine->setImportPathList(paths);
qCDebug(dsLog()) << "Engine importPaths" << s_engine->importPathList();
Expand Down