summaryrefslogtreecommitdiffstats
path: root/src/testlib
diff options
context:
space:
mode:
authorJan Arve Sæther <jan-arve.saether@qt.io>2018-02-15 14:44:56 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2018-02-22 19:29:26 +0000
commit2dc578a8f25b84abeae7a5049d93fb20d98607af (patch)
tree3f70f6a21866e6d2795f0eff93c5c03bf730a56e /src/testlib
parentd266ac3a6b21146c45be2268962a23a7f31af919 (diff)
un-crash QPlainTestLogger::printMessage()
Commit cf4a6111150d866424ee07bda80a1d38f24ea02d refactored out test identifier buildup into a standalone function, but it returned the QTestCharBuffer as a value type, which ultimately caused it to crash: Unfortunately QTestCharBuffer is not copied correctly: Since it uses the default copy ctor it will copy the buf pointer and create a deep copy of the staticBuf pointer. When the dtor was later called it would then end up calling free(buf) (where buf pointed to the staticBuf of the original QTestCharBuffer). Task-number: QTBUG-66607 Change-Id: Ifa290658be6f077a0d6613451c26aeeffc8df41c Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> (cherry picked from commit 6ffb358822db2e0d30fb34853c3222cd866d57c5) Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/testlib')
-rw-r--r--src/testlib/qplaintestlogger.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp
index 4239882c4d..a6797012c7 100644
--- a/src/testlib/qplaintestlogger.cpp
+++ b/src/testlib/qplaintestlogger.cpp
@@ -223,10 +223,8 @@ void QPlainTestLogger::outputMessage(const char *str)
outputString(str);
}
-static QTestCharBuffer testIdentifier()
+static void testIdentifier(QTestCharBuffer *identifier)
{
- QTestCharBuffer identifier;
-
const char *testObject = QTestResult::currentTestObjectName();
const char *testFunction = QTestResult::currentTestFunction() ? QTestResult::currentTestFunction() : "UnknownTestFunc";
@@ -234,8 +232,7 @@ static QTestCharBuffer testIdentifier()
const char *globalDataTag = QTestResult::currentGlobalDataTag() ? QTestResult::currentGlobalDataTag() : "";
const char *tagFiller = (dataTag[0] && globalDataTag[0]) ? ":" : "";
- QTest::qt_asprintf(&identifier, "%s::%s(%s%s%s)", testObject, testFunction, globalDataTag, tagFiller, dataTag);
- return identifier;
+ QTest::qt_asprintf(identifier, "%s::%s(%s%s%s)", testObject, testFunction, globalDataTag, tagFiller, dataTag);
}
void QPlainTestLogger::printMessage(const char *type, const char *msg, const char *file, int line)
@@ -256,8 +253,10 @@ void QPlainTestLogger::printMessage(const char *type, const char *msg, const cha
}
const char *msgFiller = msg[0] ? " " : "";
+ QTestCharBuffer testIdent;
+ testIdentifier(&testIdent);
QTest::qt_asprintf(&messagePrefix, "%s: %s%s%s%s\n",
- type, testIdentifier().data(), msgFiller, msg, failureLocation.data());
+ type, testIdent.data(), msgFiller, msg, failureLocation.data());
// In colored mode, printf above stripped our nonprintable control characters.
// Put them back.