From 3568f23e7e09b222ae9ff7a6e7dfb7e75050c6c1 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 20 Jun 2018 15:58:28 +0200 Subject: [PATCH] AutoTest: Guard against nullptr access Change-Id: I15e5d769b7a4b30421f52fbbe380ca7f19214b42 Reviewed-by: David Schulz --- src/plugins/autotest/testrunner.cpp | 30 +++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/plugins/autotest/testrunner.cpp b/src/plugins/autotest/testrunner.cpp index bd7a8f86f63..0309569ff17 100644 --- a/src/plugins/autotest/testrunner.cpp +++ b/src/plugins/autotest/testrunner.cpp @@ -216,7 +216,8 @@ void TestRunner::scheduleNext() void TestRunner::cancelCurrent(TestRunner::CancelReason reason) { if (reason == UserCanceled) { - if (!m_fakeFutureInterface->isCanceled()) // depends on using the button / progress bar + // when using the stop button we need to report, for progress bar this happens automatically + if (m_fakeFutureInterface && !m_fakeFutureInterface->isCanceled()) m_fakeFutureInterface->reportCanceled(); } if (m_currentProcess && m_currentProcess->state() != QProcess::NotRunning) { @@ -231,22 +232,23 @@ void TestRunner::cancelCurrent(TestRunner::CancelReason reason) void TestRunner::onProcessFinished() { - m_fakeFutureInterface->setProgressValue(m_fakeFutureInterface->progressValue() - + m_currentConfig->testCaseCount()); - if (!m_fakeFutureInterface->isCanceled()) { - if (m_currentProcess->exitStatus() == QProcess::CrashExit) { - m_currentOutputReader->reportCrash(); - emit testResultReady(TestResultPtr(new FaultyTestResult(Result::MessageFatal, - tr("Test for project \"%1\" crashed.").arg(m_currentConfig->displayName()) - + processInformation(m_currentProcess) + rcInfo(m_currentConfig)))); - } else if (!m_currentOutputReader->hadValidOutput()) { - emit testResultReady(TestResultPtr(new FaultyTestResult(Result::MessageFatal, - tr("Test for project \"%1\" did not produce any expected output.") + if (m_currentConfig) { + m_fakeFutureInterface->setProgressValue(m_fakeFutureInterface->progressValue() + + m_currentConfig->testCaseCount()); + if (!m_fakeFutureInterface->isCanceled()) { + if (m_currentProcess->exitStatus() == QProcess::CrashExit) { + m_currentOutputReader->reportCrash(); + emit testResultReady(TestResultPtr(new FaultyTestResult(Result::MessageFatal, + tr("Test for project \"%1\" crashed.").arg(m_currentConfig->displayName()) + + processInformation(m_currentProcess) + rcInfo(m_currentConfig)))); + } else if (!m_currentOutputReader->hadValidOutput()) { + emit testResultReady(TestResultPtr(new FaultyTestResult(Result::MessageFatal, + tr("Test for project \"%1\" did not produce any expected output.") .arg(m_currentConfig->displayName()) + processInformation(m_currentProcess) - + rcInfo(m_currentConfig)))); + + rcInfo(m_currentConfig)))); + } } } - resetInternalPointers(); if (!m_selectedTests.isEmpty() && !m_fakeFutureInterface->isCanceled())