Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
6.5.0
-
None
Description
qDebug() is supposed to be thread safe but it is not when using junitxml output format and using threads in tests.
Attached is a minimal test application.
The printout from AddressSanitizer:
==45600==ERROR: AddressSanitizer: negative-size-param: (size=-25769801320)
#0 0x7ff9c2a49593 in __asan_wrap_memmove D:\a_work\1\s\src\vctools\asan\llvm\compiler-rt\lib\sanitizer_common\sanitizer_common_interceptors.inc:813
#1 0x7ff9f577b7ba in std::_Copy_memmove<class QTestElement **, class QTestElement **>(class QTestElement **, class QTestElement **, class QTestElement **) c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\xutility:4066
#2 0x7ff9f577c3db in std::_Uninitialized_move<class QTestElement **, class std::allocator<class QTestElement *>>(class QTestElement **const, class QTestElement **const, class QTestElement **, class std::allocator<class QTestElement *> &) c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\xmemory:1711
#3 0x7ff9f577e0b9 in std::vector<class QTestElement *, class std::allocator<class QTestElement *>>::_Umove(class QTestElement **, class QTestElement **, class QTestElement **) c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\vector:1646
#4 0x7ff9f577be5d in std::vector<class QTestElement *, class std::allocator<class QTestElement *>>::_Emplace_reallocate<class QTestElement *const &>(class QTestElement **const, class QTestElement *const &) c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\vector:782
#5 0x7ff9f577c872 in ??$emplace_back@AEBQEAVQTestElement@@@?$vector@PEAVQTestElement@@V?$allocator@PEAVQTestElement@@@std@@@std@@QEAA?A_TAEBQEAVQTestElement@@@Z c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\vector:734
#6 0x7ff9f577ea5d in std::vector<class QTestElement *, class std::allocator<class QTestElement *>>::push_back(class QTestElement *const &) c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\vector:743
#7 0x7ff9f57baa16 in QTestElement::addChild(class QTestElement *) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestelement.cpp:25
#8 0x7ff9f577a1e2 in QJUnitTestLogger::addMessage(enum QAbstractTestLogger::MessageTypes, class QString const &, char const *, int) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qjunittestlogger.cpp:289
#9 0x7ff9f576f445 in QAbstractTestLogger::addMessage(enum QtMsgType, class QMessageLogContext const &, class QString const &) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qabstracttestlogger.cpp:369
#10 0x7ff9f57becef in QTest::messageHandler C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestlog.cpp:238
#11 0x7ff9c96d8cb5 in qt_message_print C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\global\qlogging.cpp:2006
#12 0x7ff9c96d77d5 in qt_message_output(enum QtMsgType, class QMessageLogContext const &, class QString const &) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\global\qlogging.cpp:2057
#13 0x7ff9c96fce06 in QDebug::~QDebug(void) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\io\qdebug.cpp:167
#14 0x7ff70cce3e87 in Worker::run(void) C:\temp\testJunitLogger\testObject.cpp:11
#15 0x7ff9c9c1919f in QThreadPrivate::start(void *) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\thread\qthread_win.cpp:290
#16 0x7ff9c2a648fe in __asan::AsanThread::ThreadStart(unsigned __int64) D:\a_work\1\s\src\vctools\asan\llvm\compiler-rt\lib\asan\asan_thread.cpp:299
#17 0x7ffa5738257c (C:\Windows\System32\KERNEL32.DLL+0x18001257c)
#18 0x7ffa57eeaf27 (C:\Windows\SYSTEM32\ntdll.dll+0x18005af27)
0x11c7ef4a2260 is located 0 bytes inside of 152-byte region [0x11c7ef4a2260,0x11c7ef4a22f8)
allocated by thread T0 here:
#0 0x7ff9c2a58038 in malloc D:\a_work\1\s\src\vctools\asan\llvm\compiler-rt\lib\asan\asan_malloc_win.cpp:252
#1 0x7ff9f5803de2 in operator new(unsigned __int64) D:\a_work\1\s\src\vctools\crt\vcstartup\src\heap\new_scalar.cpp:35
#2 0x7ff9f577d4a3 in std::_Default_allocate_traits::_Allocate(unsigned __int64) c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\xmemory:79
#3 0x7ff9f577b552 in std::_Allocate<16, struct std::_Default_allocate_traits, 0>(unsigned __int64) c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\xmemory:235
#4 0x7ff9f577e500 in std::allocator<class QTestElement *>::allocate(unsigned __int64) c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\xmemory:801
#5 0x7ff9f577bd88 in std::vector<class QTestElement *, class std::allocator<class QTestElement *>>::_Emplace_reallocate<class QTestElement *const &>(class QTestElement **const, class QTestElement *const &) c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\vector:771
#6 0x7ff9f577c872 in ??$emplace_back@AEBQEAVQTestElement@@@?$vector@PEAVQTestElement@@V?$allocator@PEAVQTestElement@@@std@@@std@@QEAA?A_TAEBQEAVQTestElement@@@Z c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\vector:734
#7 0x7ff9f577ea5d in std::vector<class QTestElement *, class std::allocator<class QTestElement *>>::push_back(class QTestElement *const &) c:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\vector:743
#8 0x7ff9f57baa16 in QTestElement::addChild(class QTestElement *) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestelement.cpp:25
#9 0x7ff9f577a1e2 in QJUnitTestLogger::addMessage(enum QAbstractTestLogger::MessageTypes, class QString const &, char const *, int) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qjunittestlogger.cpp:289
#10 0x7ff9f576f445 in QAbstractTestLogger::addMessage(enum QtMsgType, class QMessageLogContext const &, class QString const &) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qabstracttestlogger.cpp:369
#11 0x7ff9f57becef in QTest::messageHandler C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestlog.cpp:238
#12 0x7ff9c96d8cb5 in qt_message_print C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\global\qlogging.cpp:2006
#13 0x7ff9c96d77d5 in qt_message_output(enum QtMsgType, class QMessageLogContext const &, class QString const &) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\global\qlogging.cpp:2057
#14 0x7ff9c96fce06 in QDebug::~QDebug(void) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\io\qdebug.cpp:167
#15 0x7ff70cce3ad3 in TestObject::test(void) C:\temp\testJunitLogger\testObject.cpp:26
#16 0x7ff70cce15d6 in TestObject::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void **) C:\temp\testJunitLogger\build\6_5_0_msvc2022_64bit-Debug\testJunitLogger_autogen\EWIEGA46WW\moc_testObject.cpp:112
#17 0x7ff9c97f66ed in QMetaMethodInvoker::invokeImpl(class QMetaMethod, void *, enum Qt::ConnectionType, __int64, void const *const *, char const *const *, class QtPrivate::QMetaTypeInterface const *const *) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\kernel\qmetaobject.cpp:2704
#18 0x7ff9c97f2cb2 in QMetaMethod::invokeImpl(class QMetaMethod, void *, enum Qt::ConnectionType, __int64, void const *const *, char const *const *, class QtPrivate::QMetaTypeInterface const *const *) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\kernel\qmetaobject.cpp:2542
#19 0x7ff9f57ad556 in QMetaMethod::invoke<>(class QObject *, enum Qt::ConnectionType, struct QMetaMethodReturnArgument) const C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\kernel\qmetaobject.h:148
#20 0x7ff9f57ad39e in QMetaMethod::invoke<>(class QObject *, enum Qt::ConnectionType) const C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\kernel\qmetaobject.h:160
#21 0x7ff9f579d686 in QTest::TestMethods::invokeTestOnData(int) const C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestcase.cpp:1134
#22 0x7ff9f579d141 in QTest::TestMethods::invokeTest(int, class QLatin1String, class QTest::WatchDog *) const C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestcase.cpp:1426
#23 0x7ff9f579ca33 in QTest::TestMethods::invokeTests(class QObject *) const C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestcase.cpp:1752
#24 0x7ff9f5797928 in QTest::qRun(void) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestcase.cpp:2365
#25 0x7ff9f5797a4a in QTest::qExec(class QObject *, int, char **) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestcase.cpp:2251
#26 0x7ff70cce3209 in `main'::`2'::<lambda_1>::operator() C:\temp\testJunitLogger\main.cpp:18
#27 0x7ff70cce2c34 in main C:\temp\testJunitLogger\main.cpp:21
Thread T2 created by T0 here:
#0 0x7ff9c2a66607 in __asan_wrap_CreateThread D:\a_work\1\s\src\vctools\asan\llvm\compiler-rt\lib\asan\asan_win.cpp:167
#1 0x7ff9c9c1881e in QThread::start(enum QThread::Priority) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\thread\qthread_win.cpp:427
#2 0x7ff70cce39d6 in TestObject::test(void) C:\temp\testJunitLogger\testObject.cpp:24
#3 0x7ff70cce15d6 in TestObject::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void **) C:\temp\testJunitLogger\build\6_5_0_msvc2022_64bit-Debug\testJunitLogger_autogen\EWIEGA46WW\moc_testObject.cpp:112
#4 0x7ff9c97f66ed in QMetaMethodInvoker::invokeImpl(class QMetaMethod, void *, enum Qt::ConnectionType, __int64, void const *const *, char const *const *, class QtPrivate::QMetaTypeInterface const *const *) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\kernel\qmetaobject.cpp:2704
#5 0x7ff9c97f2cb2 in QMetaMethod::invokeImpl(class QMetaMethod, void *, enum Qt::ConnectionType, __int64, void const *const *, char const *const *, class QtPrivate::QMetaTypeInterface const *const *) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\kernel\qmetaobject.cpp:2542
#6 0x7ff9f57ad556 in QMetaMethod::invoke<>(class QObject *, enum Qt::ConnectionType, struct QMetaMethodReturnArgument) const C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\kernel\qmetaobject.h:148
#7 0x7ff9f57ad39e in QMetaMethod::invoke<>(class QObject *, enum Qt::ConnectionType) const C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\corelib\kernel\qmetaobject.h:160
#8 0x7ff9f579d686 in QTest::TestMethods::invokeTestOnData(int) const C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestcase.cpp:1134
#9 0x7ff9f579d141 in QTest::TestMethods::invokeTest(int, class QLatin1String, class QTest::WatchDog *) const C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestcase.cpp:1426
#10 0x7ff9f579ca33 in QTest::TestMethods::invokeTests(class QObject *) const C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestcase.cpp:1752
#11 0x7ff9f5797928 in QTest::qRun(void) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestcase.cpp:2365
#12 0x7ff9f5797a4a in QTest::qExec(class QObject *, int, char **) C:\Qt-src\qt-everywhere-src-6.5.0\qtbase\src\testlib\qtestcase.cpp:2251
#13 0x7ff70cce3209 in `main'::`2'::<lambda_1>::operator() C:\temp\testJunitLogger\main.cpp:18
#14 0x7ff70cce2c34 in main C:\temp\testJunitLogger\main.cpp:21
#15 0x7ff70cce5758 in invoke_main D:\a_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
#16 0x7ff70cce56a1 in __scrt_common_main_seh D:\a_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
#17 0x7ff70cce555d in __scrt_common_main D:\a_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:330
#18 0x7ff70cce57cd in mainCRTStartup D:\a_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp:16
#19 0x7ffa5738257c (C:\Windows\System32\KERNEL32.DLL+0x18001257c)
#20 0x7ffa57eeaf27 (C:\Windows\SYSTEM32\ntdll.dll+0x18005af27)
SUMMARY: AddressSanitizer: negative-size-param D:\a_work\1\s\src\vctools\asan\llvm\compiler-rt\lib\sanitizer_common\sanitizer_common_interceptors.inc:813 in __asan_wrap_memmove
==45600==ABORTING