Valgrind: Sanitize commandline parameter construction

Change-Id: I4d13e92c0e4a474e5edf67671ddc7f2e38c41028
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2019-06-04 12:29:07 +02:00
parent c7e2dc97e1
commit b15fce086e

View File

@@ -82,13 +82,15 @@ public:
bool ValgrindRunner::Private::run() bool ValgrindRunner::Private::run()
{ {
QStringList arguments;
if (!localServerAddress.isNull()) { if (!localServerAddress.isNull()) {
if (!q->startServers()) if (!q->startServers())
return false; return false;
bool enableXml = !disableXml; arguments.append("--child-silent-after-fork=yes");
QStringList arguments = {"--child-silent-after-fork=yes"}; bool enableXml = !disableXml;
auto handleSocketParameter = [&enableXml, &arguments](const QString &prefix, const QTcpServer &tcpServer) auto handleSocketParameter = [&enableXml, &arguments](const QString &prefix, const QTcpServer &tcpServer)
{ {
@@ -109,10 +111,8 @@ bool ValgrindRunner::Private::run()
if (enableXml) if (enableXml)
arguments << "--xml=yes"; arguments << "--xml=yes";
// FIXME: Unclear why this changes the stored data.
m_valgrindArguments = arguments + m_valgrindArguments;
} }
arguments += m_valgrindArguments;
m_valgrindProcess.setProcessChannelMode(channelMode); m_valgrindProcess.setProcessChannelMode(channelMode);
// consider appending our options last so they override any interfering user-supplied options // consider appending our options last so they override any interfering user-supplied options
@@ -136,18 +136,17 @@ bool ValgrindRunner::Private::run()
connect(&m_valgrindProcess, &ApplicationLauncher::remoteProcessStarted, connect(&m_valgrindProcess, &ApplicationLauncher::remoteProcessStarted,
this, &ValgrindRunner::Private::remoteProcessStarted); this, &ValgrindRunner::Private::remoteProcessStarted);
QStringList fullArgs = m_valgrindArguments;
if (HostOsInfo::isMacHost()) if (HostOsInfo::isMacHost())
// May be slower to start but without it we get no filenames for symbols. // May be slower to start but without it we get no filenames for symbols.
fullArgs << "--dsymutil=yes"; arguments << "--dsymutil=yes";
fullArgs << m_debuggee.executable; arguments << m_debuggee.executable;
Runnable valgrind; Runnable valgrind;
valgrind.executable = m_valgrindExecutable; valgrind.executable = m_valgrindExecutable;
valgrind.workingDirectory = m_debuggee.workingDirectory; valgrind.workingDirectory = m_debuggee.workingDirectory;
valgrind.environment = m_debuggee.environment; valgrind.environment = m_debuggee.environment;
valgrind.device = m_device; valgrind.device = m_device;
valgrind.commandLineArguments = QtcProcess::joinArgs(fullArgs, m_device->osType()); valgrind.commandLineArguments = QtcProcess::joinArgs(arguments, m_device->osType());
Utils::QtcProcess::addArgs(&valgrind.commandLineArguments, m_debuggee.commandLineArguments); Utils::QtcProcess::addArgs(&valgrind.commandLineArguments, m_debuggee.commandLineArguments);
emit q->valgrindExecuted(QtcProcess::quoteArg(valgrind.executable) + ' ' emit q->valgrindExecuted(QtcProcess::quoteArg(valgrind.executable) + ' '
+ valgrind.commandLineArguments); + valgrind.commandLineArguments);