From b562f8175a4f5d69f980ce9e23e52b9d9d68fc69 Mon Sep 17 00:00:00 2001 From: Tobias Hunger <tobias.hunger@digia.com> Date: Thu, 20 Dec 2012 11:00:27 +0100 Subject: [PATCH] BaseQtVersion: Fix crash Fix crash when not passing and error-pointer to the methods running Qmake. Change-Id: Ic3d810ac55ea80338a662c8d853f3d998d818955 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> --- src/plugins/qtsupport/baseqtversion.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 95fbfaadca..228143da12 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -48,6 +48,7 @@ #include <utils/persistentsettings.h> #include <utils/environment.h> #include <utils/hostosinfo.h> +#include <utils/qtcassert.h> #include <utils/synchronousprocess.h> #include <QDir> @@ -1187,6 +1188,8 @@ QtConfigWidget *BaseQtVersion::createConfigurationWidget() const static QByteArray runQmakeQuery(const FileName &binary, const Environment &env, QString *error) { + QTC_ASSERT(error, return QByteArray()); + const int timeOutMS = 30000; // Might be slow on some machines. QProcess process; @@ -1194,34 +1197,33 @@ static QByteArray runQmakeQuery(const FileName &binary, const Environment &env, process.start(binary.toString(), QStringList(QLatin1String("-query")), QIODevice::ReadOnly); if (!process.waitForStarted()) { - if (error) - *error = QCoreApplication::translate("QtVersion", "Cannot start '%1': %2").arg(binary.toUserOutput()).arg(process.errorString()); + *error = QCoreApplication::translate("QtVersion", "Cannot start '%1': %2").arg(binary.toUserOutput()).arg(process.errorString()); return QByteArray(); } if (!process.waitForFinished(timeOutMS)) { SynchronousProcess::stopProcess(process); - if (error) - *error = QCoreApplication::translate("QtVersion", "Timeout running '%1' (%2ms).").arg(binary.toUserOutput()).arg(timeOutMS); + *error = QCoreApplication::translate("QtVersion", "Timeout running '%1' (%2ms).").arg(binary.toUserOutput()).arg(timeOutMS); return QByteArray(); } if (process.exitStatus() != QProcess::NormalExit) { - if (error) - *error = QCoreApplication::translate("QtVersion", "'%s' crashed.").arg(binary.toUserOutput()); + *error = QCoreApplication::translate("QtVersion", "'%s' crashed.").arg(binary.toUserOutput()); return QByteArray(); } - if (error) - error->clear(); + error->clear(); return process.readAllStandardOutput(); } bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Environment &env, QHash<QString, QString> *versionInfo, QString *error) { + QString tmp; + if (!error) + error = &tmp; + const QFileInfo qmake = binary.toFileInfo(); if (!qmake.exists() || !qmake.isExecutable() || qmake.isDir()) { - if (error) - *error = QCoreApplication::translate("QtVersion", "qmake '%1' is not a executable").arg(binary.toUserOutput()); + *error = QCoreApplication::translate("QtVersion", "qmake '%1' is not a executable").arg(binary.toUserOutput()); return false; } -- GitLab