forked from qt-creator/qt-creator
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 <hjk@qt.io>
This commit is contained in:
@@ -377,12 +377,17 @@ public:
|
|||||||
penv = Environment::systemEnvironment().toProcessEnvironment();
|
penv = Environment::systemEnvironment().toProcessEnvironment();
|
||||||
const QStringList senv = penv.toStringList();
|
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,
|
bool startResult = m_ptyProcess->startProcess(executable,
|
||||||
HostOsInfo::isWindowsHost()
|
HostOsInfo::isWindowsHost()
|
||||||
? QStringList{m_setup.m_nativeArguments}
|
? QStringList{m_setup.m_nativeArguments}
|
||||||
<< arguments
|
<< arguments
|
||||||
: arguments,
|
: arguments,
|
||||||
m_setup.m_workingDirectory.nativePath(),
|
workingDir.nativePath(),
|
||||||
senv,
|
senv,
|
||||||
m_setup.m_ptyData->size().width(),
|
m_setup.m_ptyData->size().width(),
|
||||||
m_setup.m_ptyData->size().height());
|
m_setup.m_ptyData->size().height());
|
||||||
|
@@ -66,7 +66,11 @@ DesktopDevice::DesktopDevice()
|
|||||||
process.setTerminalMode(TerminalMode::Detached);
|
process.setTerminalMode(TerminalMode::Detached);
|
||||||
process.setEnvironment(realEnv);
|
process.setEnvironment(realEnv);
|
||||||
process.setCommand(CommandLine{*shell});
|
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();
|
process.start();
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
|
Reference in New Issue
Block a user