Opening a PHP file in Kate makes it crash in Syntax highlighting: Thread 1 (Thread 0x7f0193cd6800 (LWP 65464)): [KCrash Handler] #6 KateHighlighting::applyFormat (this=this@entry=0x557a3ecc4d80, offset=offset@entry=0, length=5, format=...) at ./src/syntax/katehighlight.cpp:261 #7 0x00007f018dbe8201 in KSyntaxHighlighting::AbstractHighlighter::highlightLine (this=this@entry=0x557a3ecc4d80, text=..., state=...) at ./src/lib/abstracthighlighter.cpp:226 #8 0x00007f0193723ebc in KateHighlighting::doHighlight (this=0x557a3ecc4d80, prevLine=<optimized out>, textLine=0x557a3ecc1680, nextLine=nextLine@entry=0x557a3ecc1700, ctxChanged=@0x7ffc1ea46257: false, tabWidth=4) at ./src/syntax/katehighlight.cpp:207 #9 0x00007f01936cab08 in KateBuffer::doHighlight (this=0x557a3e331530, startLine=<optimized out>, endLine=<optimized out>, invalidate=<optimized out>) at ./src/document/katebuffer.cpp:395 #10 0x00007f01936ab183 in KTextEditor::DocumentPrivate::kateTextLine (this=0x557a3e327d50, i=0) at ./src/document/katedocument.cpp:5180 #11 0x00007f019370c524 in KateLineLayout::textLine (this=0x557a3ecc1590, reloadForce=reloadForce@entry=false) at ./src/render/katelinelayout.cpp:69 #12 0x00007f01937051de in KateRenderer::layoutLine (this=0x557a3e891530, lineLayout=..., maxwidth=1006, cacheLayout=<optimized out>) at ./src/render/katerenderer.cpp:1009 #13 0x00007f0193708d79 in KateLayoutCache::line (this=this@entry=0x557a3e896030, realLine=realLine@entry=0, virtualLine=virtualLine@entry=-1) at ./src/render/katelayoutcache.cpp:334 #14 0x00007f0193709ab0 in KateLayoutCache::updateViewCache (this=this@entry=0x557a3e896030, startPos=..., newViewLineCount=newViewLineCount@entry=61, viewLinesScrolled=viewLinesScrolled@entry=0) at ./src/render/katelayoutcache.cpp:192 #15 0x00007f01937439bb in KateViewInternal::doUpdateView (this=0x557a3e594380, changed=<optimized out>, viewLinesScrolled=0) at ./src/view/kateviewinternal.cpp:637 #16 0x00007f0193743c84 in KateViewInternal::updateView (this=0x557a3e594380, changed=<optimized out>, viewLinesScrolled=viewLinesScrolled@entry=0) at ./src/view/kateviewinternal.cpp:611 #17 0x00007f019372ccc6 in KTextEditor::ViewPrivate::updateView (this=0x557a3e88f570, changed=<optimized out>) at ./src/view/kateview.cpp:2044 #18 0x00007f019373ca6f in KTextEditor::ViewPrivate::updateDocumentConfig (this=<optimized out>) at ./src/view/kateview.cpp:1902 #19 0x00007f01936b3c54 in KTextEditor::DocumentPrivate::updateConfig (this=0x557a3e327d50) at ./src/document/katedocument.cpp:4418 #20 0x00007f0193784d1d in KateDocumentConfig::updateConfig (this=0x557a3e2fb2c0) at ./src/utils/kateconfig.cpp:431 #21 0x00007f019377eb30 in KateConfig::configEnd (this=0x557a3e2fb2c0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qarraydata.h:237 #22 KateDocumentConfig::setEncoding (this=this@entry=0x557a3e2fb2c0, encoding=...) at ./src/utils/kateconfig.cpp:937 #23 0x00007f01936c9ec8 in KateBuffer::openFile (this=this@entry=0x557a3e331530, m_file=..., enforceTextCodec=enforceTextCodec@entry=false) at ./src/document/katebuffer.cpp:208 #24 0x00007f01936c22ff in KTextEditor::DocumentPrivate::openFile (this=0x557a3e327d50) at ./src/document/katedocument.cpp:2250 #25 0x00007f019336fad6 in ?? () from /usr/lib/x86_64-linux-gnu/libKF5Parts.so.5 #26 0x00007f0193370961 in KParts::ReadOnlyPart::openUrl(QUrl const&) () from /usr/lib/x86_64-linux-gnu/libKF5Parts.so.5 #27 0x00007f01936aec11 in KTextEditor::DocumentPrivate::openUrl (this=0x557a3e327d50, url=...) at ./src/document/katedocument.cpp:2644
It's an assert in debug builds three lines up already: ASSERT: "it != m_formatsIdToIndex.end()" in file /k/kde5/src/ktexteditor/src/syntax/katehighlight.cpp, line 258
That means a Format arrives that was not seen for the definition and all its included ones. I thought this was fixed during Akademy. But yeah, it crashs even with the unit test input :/ I register in the constructor only ids: id 1 id 2 id 3 id 4 id 5 id 6 id 7 id 8 id 9 id 10 id 11 id 12 id 56 id 57 id 58 id 59 id 60 id 142 id 143 id 144 id 145 id 146 id 147 id 148 id 149 id 150 id 151 id 152 id 153 id 154 id 155 id 156 id 157 id 158 id 159 id 160 id 161 id 162 id 163 id 164 id 165 id 166 id 167 id 168 id 169 id 170 id 171 id 172 id 173 id 174 id 175 id 176 id 177 id 178 id 179 id 180 id 181 id 182 id 183 id 184 id 185 id 186 id 187 id 188 id 35 id 36 id 37 id 38 id 39 id 40 id 41 id 42 id 43 id 44 id 45 id 46 id 47 id 48 id 49 id 50 id 51 id 52 id 53 id 54 id 55 id 120 id 121 id 122 id 123 id 124 id 125 id 126 id 127 but we get (gdb) print format.id() $3 = 15
Have a fix.
Request here https://phabricator.kde.org/D14952
Git commit 9cfb8fa9a684917362b6a5ca99e099f5a4353ae6 by Christoph Cullmann. Committed on 20/08/2018 at 16:59. Pushed by cullmann into branch 'master'. Fix includedDefinitions, handle definition change in context switch AcceptedPublic Fix includedDefinitions, handle definition change in context switch. They were missing, see PHP/HTML. I cleaned up the code a bit to just use QVector, no need for a queue, the order is anyways arbitrary (but stable). Differential Revision: https://phabricator.kde.org/D14952 M +10 -5 autotests/syntaxrepository_test.cpp M +19 -15 src/lib/definition.cpp https://commits.kde.org/syntax-highlighting/9cfb8fa9a684917362b6a5ca99e099f5a4353ae6