Skip to content

highlighter: Fix crash during ~Highlighter()

Seems to be happening under a recent Qt version only.

Tested versions:

  • Crashes under Qt 6.7.0 (Qt dev branch)
  • Cannot reproduce the crash under Qt 6.4.2.

Fixes the following crash:

7: Thread 1 (Thread 0x7fc4780f8d80 (LWP 84864) "test_highlighte"):
7: #0  0x00007fc4772e16c7 in __GI___wait4 (pid=84870, stat_loc=0x0, options=0, usage=0x0) at ../sysdeps/unix/sysv/linux/wait4.c:30
7: #1  0x00007fc479632ee5 in generateStackTrace () at /home/kfunk/devel/src/qt6/qtbase/src/testlib/qtestcase.cpp:409
7: #2  0x00007fc479633e25 in generateStackTrace () at /home/kfunk/devel/src/qt6/qtbase/src/testlib/qtestcase.cpp:373
7: #3  (anonymous namespace)::FatalSignalHandler::actionHandler (signum=6, info=<optimized out>) at /home/kfunk/devel/src/qt6/qtbase/src/testlib/qtestcase.cpp:2157
7: #4  <signal handler called>
7: #5  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44
7: #6  __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
7: #7  __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
7: #8  0x00007fc47723c406 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
7: #9  0x00007fc47722287c in __GI_abort () at ./stdlib/abort.c:79
7: #10 0x00007fc477cbc491 in qAbort () at /home/kfunk/devel/src/qt6/qtbase/src/corelib/global/qglobal.cpp:161
7: #11 0x00007fc477cc7040 in qt_message_fatal (message=<synthetic pointer>..., context=...) at /home/kfunk/devel/src/qt6/qtbase/src/corelib/global/qlogging.cpp:2048
7: #12 QMessageLogger::fatal (this=this@entry=0x7ffd9f68e5f8, msg=msg@entry=0x7fc477ad5100 "ASSERT failure in %s: \"%s\", file %s, line %d") at /home/kfunk/devel/src/qt6/qtbase/src/corelib/global/qlogging.cpp:934
7: #13 0x00007fc477cbaccd in qt_assert_x (where=<optimized out>, what=<optimized out>, file=<optimized out>, line=line@entry=128) at /home/kfunk/devel/src/qt6/qtbase/src/corelib/global/qassert.cpp:77
7: #14 0x00007fc4796dfad4 in QtPrivate::assertObjectType<Sonnet::Highlighter> (o=0x7ffd9f68e920) at /home/kfunk/devel/build/qt6/qtbase/include/QtCore/../../../../../src/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
7: #15 QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1, 2>, QtPrivate::List<int, int, int>, void, void (Sonnet::Highlighter::*)(int, int, int)>::call (f=<optimized out>, o=0x7ffd9f68e920, arg=0x7ffd9f68e750) at /home/kfunk/devel/build/qt6/qtbase/include/QtCore/../../../../../src/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:142
7: #16 QtPrivate::FunctionPointer<void (Sonnet::Highlighter::*)(int, int, int)>::call<QtPrivate::List<int, int, int>, void> (f=<optimized out>, o=0x7ffd9f68e920, arg=0x7ffd9f68e750) at /home/kfunk/devel/build/qt6/qtbase/include/QtCore/../../../../../src/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:180
7: #17 QtPrivate::QCallableObject<void (Sonnet::Highlighter::*)(int, int, int), QtPrivate::List<int, int, int>, void>::impl (which=<optimized out>, this_=<optimized out>, r=0x7ffd9f68e920, a=0x7ffd9f68e750, ret=<optimized out>) at /home/kfunk/devel/build/qt6/qtbase/include/QtCore/../../../../../src/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:471
7: #18 0x00007fc477dcb529 in QtPrivate::QSlotObjectBase::call (a=0x7ffd9f68e750, r=0x7ffd9f68e920, this=<optimized out>) at /home/kfunk/devel/src/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:422
7: #19 doActivate<false> (sender=sender@entry=0x559149806930, signal_index=3, argv=0x7ffd9f68e750) at /home/kfunk/devel/src/qt6/qtbase/src/corelib/kernel/qobject.cpp:3977
7: #20 0x00007fc477dbedd1 in QMetaObject::activate (sender=sender@entry=0x559149806930, m=m@entry=0x7fc478bbb3c0 <QTextDocument::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffd9f68e750) at /home/kfunk/devel/src/qt6/qtbase/src/corelib/kernel/qobject.cpp:4037
7: #21 0x00007fc478856270 in QTextDocument::contentsChange (this=this@entry=0x559149806930, _t1=<optimized out>, _t2=<optimized out>, _t3=<optimized out>) at /home/kfunk/devel/build/qt6/qtbase/src/gui/Gui_autogen/include/moc_qtextdocument.cpp:459
7: #22 0x00007fc4788717ba in QTextDocumentPrivate::finishEdit (this=0x5591496b7990) at /home/kfunk/devel/src/qt6/qtbase/src/gui/text/qtextdocument_p.cpp:1188
7: #23 0x00007fc478871c78 in QTextDocumentPrivate::endEditBlock (this=<optimized out>) at /home/kfunk/devel/src/qt6/qtbase/src/gui/text/qtextdocument_p.cpp:1172
7: #24 0x00007fc4788514c3 in QTextCursor::endEditBlock (this=<optimized out>) at /home/kfunk/devel/src/qt6/qtbase/src/gui/text/qtextcursor.cpp:2521
7: #25 0x00007fc4788474c1 in QSyntaxHighlighter::setDocument (this=0x7ffd9f68e920, doc=0x0) at /home/kfunk/devel/src/qt6/qtbase/src/gui/text/qsyntaxhighlighter.cpp:302
7: #26 0x00007fc478847965 in QSyntaxHighlighter::~QSyntaxHighlighter (this=0x7ffd9f68e920, __in_chrg=<optimized out>) at /home/kfunk/devel/src/qt6/qtbase/src/gui/text/qsyntaxhighlighter.cpp:284
7: #27 0x00005591486a038a in HighlighterTest::testEnglish (this=<optimized out>) at /home/kfunk/devel/src/kde/sonnet/autotests/test_highlighter.cpp:76
7: #28 0x00007fc477d725b6 in QMetaMethodInvoker::invokeImpl (self=..., target=0x7ffd9f68f3a0, connectionType=connectionType@entry=Qt::DirectConnection, paramCount=paramCount@entry=1, parameters=parameters@entry=0x7ffd9f68ec60, typeNames=<optimized out>, metaTypes=<optimized out>) at /home/kfunk/devel/src/qt6/qtbase/src/corelib/kernel/qmetaobject.cpp:2713
7: #29 0x00007fc477d73688 in QMetaMethod::invokeImpl (self=..., target=<optimized out>, connectionType=connectionType@entry=Qt::DirectConnection, paramCount=paramCount@entry=1, parameters=parameters@entry=0x7ffd9f68ec60, typeNames=<optimized out>, metaTypes=<optimized out>) at /home/kfunk/devel/src/qt6/qtbase/src/corelib/kernel/qmetaobject.cpp:2551
7: #30 0x00007fc47963aeee in QMetaMethod::invoke<>(QObject*, Qt::ConnectionType, QMetaMethodReturnArgument) const (r=..., c=Qt::DirectConnection, obj=<optimized out>, this=<optimized out>) at /home/kfunk/devel/src/qt5/qtbase/src/corelib/kernel/qmetaobject.h:148
7: #31 QMetaMethod::invoke<>(QObject*, Qt::ConnectionType) const (c=Qt::DirectConnection, obj=<optimized out>, this=<optimized out>) at /home/kfunk/devel/src/qt5/qtbase/src/corelib/kernel/qmetaobject.h:160
7: #32 QTest::TestMethods::invokeTestOnData (this=0x7ffd9f68f210, index=<optimized out>) at /home/kfunk/devel/src/qt6/qtbase/src/testlib/qtestcase.cpp:1134
7: #33 0x00007fc47963bc6a in QTest::TestMethods::invokeTest (this=this@entry=0x7ffd9f68f210, index=index@entry=0, tag=..., watchDog=0x55914972ca50) at /home/kfunk/devel/src/qt6/qtbase/src/testlib/qtestcase.cpp:1426
7: #34 0x00007fc47963c4bd in QTest::TestMethods::invokeTests (this=this@entry=0x7ffd9f68f210, testObject=0x7ffd9f68f3a0) at /home/kfunk/devel/src/qt6/qtbase/src/testlib/qtestcase.cpp:1752
7: #35 0x00007fc47963cd6d in QTest::qRun () at /home/kfunk/devel/src/qt6/qtbase/src/testlib/qtestcase.cpp:2365
7: #36 0x00007fc47963d3e7 in QTest::qExec (testObject=testObject@entry=0x7ffd9f68f3a0, argc=<optimized out>, argv=argv@entry=0x7ffd9f68f4e8) at /home/kfunk/devel/src/qt6/qtbase/src/testlib/qtestcase.cpp:2251
7: #37 0x00005591486a1bd4 in main (argc=84864, argv=0x7ffd9f68f4e8) at /home/kfunk/devel/src/kde/sonnet/autotests/test_highlighter.cpp:167

Merge request reports