From 2cc63722e7cb4098d39d1251e817644b4bf75727 Mon Sep 17 00:00:00 2001 From: ComixHe Date: Thu, 16 Nov 2023 11:46:41 +0800 Subject: [PATCH] fix: incorrect behavior of processguesser1service Signed-off-by: ComixHe --- src/dbus/processguesser1service.cpp | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/dbus/processguesser1service.cpp b/src/dbus/processguesser1service.cpp index 8c0f487..f374ad7 100644 --- a/src/dbus/processguesser1service.cpp +++ b/src/dbus/processguesser1service.cpp @@ -69,21 +69,27 @@ QString ProcessGuesser1Service::GuessApplicationId(const QDBusUnixFileDescriptor QString appId; for (const QSharedPointer &app : applications) { - auto exec = app->findEntryValue(DesktopFileEntryKey, "Exec", EntryValueType::Raw).toString(); + auto tryExec = app->findEntryValue(DesktopFileEntryKey, "TryExec", EntryValueType::String).toString(); + if (!tryExec.isEmpty() and !checkTryExec(tryExec)) { + qWarning() << "Couldn't find the binary which corresponding with process."; + continue; + } + + auto exec = app->findEntryValue(DesktopFileEntryKey, "Exec", EntryValueType::String).toString(); if (exec.isEmpty()) { // NOTE: Exec is not required in desktop file. continue; } auto opt = ApplicationService::unescapeExecArgs(exec); if (!opt) { - sendErrorReply(QDBusError::InternalError); - return {}; + qWarning() << app->id() << "unescape exec failed, skip."; + continue; } auto execList = std::move(opt).value(); if (execList.isEmpty()) { - sendErrorReply(QDBusError::InternalError); - return {}; + qWarning() << "exec is empty,skip."; + continue; } auto execBin = execList.first(); @@ -94,17 +100,12 @@ QString ProcessGuesser1Service::GuessApplicationId(const QDBusUnixFileDescriptor if (!execBin.isEmpty() and execBin == binary) { if (!appId.isEmpty()) { - sendErrorReply(QDBusError::Failed, "Multiple binary have been detected."); + auto msg = QString{"Multiple binary have been detected."}; + qWarning() << msg << appId << app->id(); + sendErrorReply(QDBusError::Failed, msg); return {}; } appId = app->id(); - continue; - } - - auto tryExec = app->findEntryValue(DesktopFileEntryKey, "TryExec", EntryValueType::String).toString(); - if (!checkTryExec(tryExec)) { - sendErrorReply(QDBusError::Failed, "Couldn't find the binary which corresponding with process."); - return {}; } }