From 034245ec1f1aa941f28f993834725bc84a6a8cba Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 17 Apr 2025 13:27:47 +0200 Subject: [PATCH] Prevent passing invalid working directories in some places QProcess fails silently when given an invalid working directory, so don't allow that to happen. Fixes: QTCREATORBUG-32841 Change-Id: Id3309054569625a6224e9452d3b2164836cf5160 Reviewed-by: hjk --- src/libs/utils/qtcprocess.cpp | 7 ++++++- .../projectexplorer/devicesupport/desktopdevice.cpp | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 1468515a1eb..d7e93b96784 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -377,12 +377,17 @@ public: penv = Environment::systemEnvironment().toProcessEnvironment(); const QStringList senv = penv.toStringList(); + FilePath workingDir = m_setup.m_workingDirectory; + if (!workingDir.isDir()) + workingDir = workingDir.parentDir(); + if (!QTC_GUARD(workingDir.exists())) + workingDir = workingDir.withNewPath({}); bool startResult = m_ptyProcess->startProcess(executable, HostOsInfo::isWindowsHost() ? QStringList{m_setup.m_nativeArguments} << arguments : arguments, - m_setup.m_workingDirectory.nativePath(), + workingDir.nativePath(), senv, m_setup.m_ptyData->size().width(), m_setup.m_ptyData->size().height()); diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp index cc341e5e899..2b8d15fa7aa 100644 --- a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp @@ -66,7 +66,11 @@ DesktopDevice::DesktopDevice() process.setTerminalMode(TerminalMode::Detached); process.setEnvironment(realEnv); process.setCommand(CommandLine{*shell}); - process.setWorkingDirectory(path); + FilePath workingDir = path; + if (!workingDir.isDir()) + workingDir = workingDir.parentDir(); + if (QTC_GUARD(workingDir.exists())) + process.setWorkingDirectory(workingDir); process.start(); return {};