Bug 350299 - Kate with vi mode, <c><e> near end of file causes crash
Summary: Kate with vi mode, <c><e> near end of file causes crash
Status: RESOLVED WORKSFORME
Alias: None
Product: kate
Classification: Applications
Component: Vi Input Mode (show other bugs)
Version: 3.14.2
Platform: Debian stable Linux
: NOR crash
Target Milestone: ---
Assignee: KWrite Developers
URL:
Keywords: drkonqi
Depends on:
Blocks:
 
Reported: 2015-07-16 17:01 UTC by Christopher Leonard
Modified: 2017-10-25 14:39 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Christopher Leonard 2015-07-16 17:01:48 UTC
Application: kate (3.14.2)
KDE Platform Version: 4.14.2
Qt Version: 4.8.6
Operating System: Linux 3.16.0-4-686-pae i686
Distribution: Debian GNU/Linux 8.1 (jessie)

-- Information about the crash:
- What I was doing when the application crashed:
Using the vi input option, near the end of a file, if you have the cursor in a position where <e> can no longer advances the cursor, the command <c><e> (which attempts to delete until the next <e> position and start insert mode) will cause Kate to crash / immediately terminate.

- Custom settings of the application:
* vi mode
* Latest version of Kate 4 distributed by Debian Jessie

The crash can be reproduced every time.

-- Backtrace:
Application: Kate (kate), signal: Segmentation fault
Using host libthread_db library "/lib/i386-linux-gnu/i686/cmov/libthread_db.so.1".
[Current thread is 1 (Thread 0xb4954740 (LWP 3605))]

Thread 3 (Thread 0xb1039b40 (LWP 3606)):
#0  0xb77a1d40 in __kernel_vsyscall ()
#1  0xb5d08c4b in pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_wait.S:187
#2  0xb76c41bc in __pthread_cond_wait (cond=0xb17c18f0, mutex=0xb17c18d8) at forward.c:149
#3  0xb16a844f in ?? () from /usr/lib/i386-linux-gnu/libQtScript.so.4
#4  0xb16a848c in ?? () from /usr/lib/i386-linux-gnu/libQtScript.so.4
#5  0xb5d04efb in start_thread (arg=0xb1039b40) at pthread_create.c:309
#6  0xb76b762e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:129

Thread 2 (Thread 0xaecdab40 (LWP 3608)):
#0  __libc_disable_asynccancel (oldtype=2) at ../nptl/cancellation.c:82
#1  0xb76acdf4 in poll () at ../sysdeps/unix/syscall-template.S:81
#2  0xb5c0e0b0 in g_poll () from /lib/i386-linux-gnu/libglib-2.0.so.0
#3  0xb5bff054 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0
#4  0xb5bff196 in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0
#5  0xb6002854 in QEventDispatcherGlib::processEvents (this=0xae300468, flags=...) at kernel/qeventdispatcher_glib.cpp:427
#6  0xb5fced9f in QEventLoop::processEvents (this=0xaecda254, flags=...) at kernel/qeventloop.cpp:149
#7  0xb5fcf12e in QEventLoop::exec (this=0xaecda254, flags=...) at kernel/qeventloop.cpp:204
#8  0xb5eb3b0b in QThread::exec (this=0xa248cf8) at thread/qthread.cpp:538
#9  0xb5fae906 in QInotifyFileSystemWatcherEngine::run (this=0xa248cf8) at io/qfilesystemwatcher_inotify.cpp:265
#10 0xb5eb670e in QThreadPrivate::start (arg=0xa248cf8) at thread/qthread_unix.cpp:349
#11 0xb5d04efb in start_thread (arg=0xaecdab40) at pthread_create.c:309
#12 0xb76b762e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:129

Thread 1 (Thread 0xb4954740 (LWP 3605)):
[KCrash Handler]
#7  detach (this=0x0) at ../../include/QtCore/../../src/corelib/tools/qvector.h:147
#8  data (this=0x0) at ../../include/QtCore/../../src/corelib/tools/qvector.h:152
#9  operator[] (i=0, this=0x0) at ../../include/QtCore/../../src/corelib/tools/qvector.h:360
#10 QTextLine::width (this=0xbf8b2a18) at text/qtextlayout.cpp:1398
#11 0xb1931bd4 in KateRenderer::cursorToX (this=0xa272718, range=..., pos=..., returnPastLine=false) at ../../part/render/katerenderer.cpp:1058
#12 0xb1988e72 in KateViewInternal::makeVisible (this=0xa2664f0, c=..., endCol=-1, force=false, center=false, calledExternally=false) at ../../part/view/kateviewinternal.cpp:666
#13 0xb198bc0d in KateViewInternal::updateCursor (this=0xa2664f0, newCursor=..., force=false, center=false, calledExternally=false) at ../../part/view/kateviewinternal.cpp:1901
#14 0xb19b3045 in KateViModeBase::updateCursor (this=0xa421e50, c=...) at ../../part/vimode/katevimodebase.cpp:934
#15 0xb19c844e in KateViNormalMode::commandChange (this=0xa421e50) at ../../part/vimode/katevinormalmode.cpp:1159
#16 0xb19d62c0 in KateViCommand::execute (this=0xa3674f0) at ../../part/vimode/katevicommand.cpp:38
#17 0xb19c7218 in KateViNormalMode::executeCommand (this=0xa421e50, cmd=0xa3674f0) at ../../part/vimode/katevinormalmode.cpp:515
#18 0xb19ce1e0 in KateViNormalMode::handleKeypress (this=0xa421e50, e=0x0) at ../../part/vimode/katevinormalmode.cpp:380
#19 0xb19abe8a in KateViInputModeManager::handleKeypress (this=0xa421d80, e=0xbf8b30c0) at ../../part/vimode/kateviinputmodemanager.cpp:162
#20 0xb198764c in KateViewInternal::keyPressEvent (this=0xa2664f0, e=0xbf8b30c0) at ../../part/view/kateviewinternal.cpp:2351
#21 0xb198dcef in KateViewInternal::eventFilter (this=0xa2664f0, obj=0xa2664f0, e=0xbf8b30c0) at ../../part/view/kateviewinternal.cpp:2239
#22 0xb5fd05a3 in QCoreApplicationPrivate::sendThroughObjectEventFilters (this=0x9b338a0, receiver=0xa2664f0, event=0xbf8b30c0) at kernel/qcoreapplication.cpp:1065
#23 0xb6bf04e8 in QApplicationPrivate::notify_helper (this=0x9b338a0, receiver=0xa2664f0, e=0xbf8b30c0) at kernel/qapplication.cpp:4566
#24 0xb6bf8e03 in QApplication::notify (this=0xbf8b3d48, receiver=0xbf8b30c0, e=0xbf8b30c0) at kernel/qapplication.cpp:4011
#25 0xb63c0cdc in KApplication::notify (this=0xbf8b3d48, receiver=0xa2664f0, event=0xbf8b30c0) at ../../kdeui/kernel/kapplication.cpp:311
#26 0xb5fd042a in QCoreApplication::notifyInternal (this=0xbf8b3d48, receiver=0xa2664f0, event=0xbf8b30c0) at kernel/qcoreapplication.cpp:955
#27 0xb19ad395 in sendEvent (event=<optimized out>, receiver=<optimized out>) at /usr/include/qt4/QtCore/qcoreapplication.h:231
#28 KateViInputModeManager::feedKeyPresses (this=0xa421d80, keyPresses=...) at ../../part/vimode/kateviinputmodemanager.cpp:262
#29 0xb19f9a68 in KateViKeyMapper::playBackRejectedKeys (this=0xa429a50) at ../../part/vimode/katevikeymapper.cpp:64
#30 0xb19f9ff8 in KateViKeyMapper::handleKeypress (this=0xa429a50, key=...) at ../../part/vimode/katevikeymapper.cpp:123
#31 0xb19abcc3 in KateViInputModeManager::handleKeypress (this=0xa421d80, e=0xbf8b35e4) at ../../part/vimode/kateviinputmodemanager.cpp:140
#32 0xb198764c in KateViewInternal::keyPressEvent (this=0xa2664f0, e=0xbf8b35e4) at ../../part/view/kateviewinternal.cpp:2351
#33 0xb198dcef in KateViewInternal::eventFilter (this=0xa2664f0, obj=0xa2664f0, e=0xbf8b35e4) at ../../part/view/kateviewinternal.cpp:2239
#34 0xb5fd05a3 in QCoreApplicationPrivate::sendThroughObjectEventFilters (this=0x9b338a0, receiver=0xa2664f0, event=0xbf8b35e4) at kernel/qcoreapplication.cpp:1065
#35 0xb6bf04e8 in QApplicationPrivate::notify_helper (this=0x9b338a0, receiver=0xa2664f0, e=0xbf8b35e4) at kernel/qapplication.cpp:4566
#36 0xb6bf8e03 in QApplication::notify (this=0xbf8b3d48, receiver=0xbf8b35e4, e=0xbf8b35e4) at kernel/qapplication.cpp:4011
#37 0xb63c0cdc in KApplication::notify (this=0xbf8b3d48, receiver=0xa2664f0, event=0xbf8b35e4) at ../../kdeui/kernel/kapplication.cpp:311
#38 0xb5fd042a in QCoreApplication::notifyInternal (this=0xbf8b3d48, receiver=0xa2664f0, event=0xbf8b35e4) at kernel/qcoreapplication.cpp:955
#39 0xb6bee887 in sendSpontaneousEvent (event=0xbf8b35e4, receiver=0xa2664f0) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:234
#40 qt_sendSpontaneousEvent (receiver=0xa2664f0, event=0xbf8b35e4) at kernel/qapplication.cpp:5568
#41 0xb6ca14c9 in QKeyMapper::sendKeyEvent (keyWidget=0xa2664f0, grab=false, type=QEvent::KeyPress, code=69, modifiers=..., text=..., autorepeat=false, count=1, nativeScanCode=26, nativeVirtualKey=101, nativeModifiers=0) at kernel/qkeymapper_x11.cpp:1866
#42 0xb6ca19ec in QKeyMapperPrivate::translateKeyEvent (this=0x9b62d38, keyWidget=0xa2664f0, event=0xbf8b393c, grab=false) at kernel/qkeymapper_x11.cpp:1836
#43 0xb6c78e5a in QApplication::x11ProcessEvent (this=0xbf8b3d48, event=0xbf8b393c) at kernel/qapplication_x11.cpp:3556
#44 0xb6ca4441 in x11EventSourceDispatch (s=0x9b3afb0, callback=0x0, user_data=0x0) at kernel/qguieventdispatcher_glib.cpp:146
#45 0xb5bfeda4 in g_main_context_dispatch () from /lib/i386-linux-gnu/libglib-2.0.so.0
#46 0xb5bff0c9 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0
#47 0xb5bff196 in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0
#48 0xb6002839 in QEventDispatcherGlib::processEvents (this=0x9b04ef0, flags=...) at kernel/qeventdispatcher_glib.cpp:425
#49 0xb6ca4516 in QGuiEventDispatcherGlib::processEvents (this=0x9b04ef0, flags=...) at kernel/qguieventdispatcher_glib.cpp:204
#50 0xb5fced9f in QEventLoop::processEvents (this=0xbf8b3c14, flags=...) at kernel/qeventloop.cpp:149
#51 0xb5fcf12e in QEventLoop::exec (this=0xbf8b3c14, flags=...) at kernel/qeventloop.cpp:204
#52 0xb5fd52b6 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1227
#53 0xb6bee614 in QApplication::exec () at kernel/qapplication.cpp:3828
#54 0xb77984d5 in kdemain (argc=2, argv=0xbf8b3e64) at ../../../kate/app/katemain.cpp:381
#55 0x0804854b in main (argc=2, argv=0xbf8b3e64) at kate_dummy.cpp:3

Possible duplicates by query: bug 331021.

Reported using DrKonqi
Comment 1 Miquel Sabaté 2015-07-17 11:24:10 UTC
Can reproduce. Here's the backtrace that I got from current master:

#0  0x00007ffff0c20638 in raise () at /lib64/libc.so.6
#1  0x00007ffff0c21a1a in abort () at /lib64/libc.so.6
#2  0x00007ffff18c2005 in  () at /usr/lib64/libQt5Core.so.5
#3  0x00007ffff18bd5be in  () at /usr/lib64/libQt5Core.so.5
#4  0x00007ffff7653654 in Kate::TextFolding::lineToVisibleLine(int) const (this=0x7b4140, line=-1) at ../src/buffer/katetextfolding.cpp:390
#5  0x00007ffff7798388 in KateViewInternal::viewLineOffset(KTextEditor::Cursor const&, int, bool) (this=0x7cc1b0, virtualCursor=..., offset=0, keepX=false)
    at ../src/view/kateviewinternal.cpp:1392
#6  0x00007ffff779592e in KateViewInternal::makeVisible(KTextEditor::Cursor const&, int, bool, bool, bool) (this=0x7cc1b0, c=..., endCol=-1, force=false, center=false, calledExternally=false)
    at ../src/view/kateviewinternal.cpp:656
#7  0x00007ffff779b2e5 in KateViewInternal::updateCursor(KTextEditor::Cursor const&, bool, bool, bool) (this=0x7cc1b0, newCursor=..., force=false, center=false, calledExternally=false)
    at ../src/view/kateviewinternal.cpp:1972
#8  0x00007ffff782d5a4 in KateAbstractInputMode::updateCursor(KTextEditor::Cursor const&) (this=0x94ced0, c=...) at ../src/inputmode/kateabstractinputmode.cpp:39
#9  0x00007ffff786d904 in KateVi::InputModeManager::updateCursor(KTextEditor::Cursor const&) (this=0x7ceac0, c=...) at ../src/vimode/inputmodemanager.cpp:457
#10 0x00007ffff783972b in KateVi::ModeBase::updateCursor(KTextEditor::Cursor const&) const (this=0x97f7f0, c=...) at ../src/vimode/modes/modebase.cpp:792
#11 0x00007ffff78413be in KateVi::NormalViMode::commandChange() (this=0x97f7f0) at ../src/vimode/modes/normalvimode.cpp:1130
#12 0x00007ffff786f044 in KateVi::Command::execute() const (this=0x7ca010) at ../src/vimode/command.cpp:43
#13 0x00007ffff783ecfa in KateVi::NormalViMode::executeCommand(KateVi::Command const*) (this=0x97f7f0, cmd=0x7ca010) at ../src/vimode/modes/normalvimode.cpp:488
#14 0x00007ffff783e616 in KateVi::NormalViMode::handleKeypress(QKeyEvent const*) (this=0x97f7f0, e=0x7fffffffb780) at ../src/vimode/modes/normalvimode.cpp:374
#15 0x00007ffff786c880 in KateVi::InputModeManager::handleKeypress(QKeyEvent const*) (this=0x7ceac0, e=0x7fffffffb780) at ../src/vimode/inputmodemanager.cpp:149
#16 0x00007ffff782f1fb in KateViInputMode::keyPress(QKeyEvent*) (this=0x94ced0, e=0x7fffffffb780) at ../src/inputmode/kateviinputmode.cpp:284
#17 0x00007ffff779d4ad in KateViewInternal::keyPressEvent(QKeyEvent*) (this=0x7cc1b0, e=0x7fffffffb780) at ../src/view/kateviewinternal.cpp:2378
#18 0x00007ffff779ceab in KateViewInternal::eventFilter(QObject*, QEvent*) (this=0x7cc1b0, obj=0x7cc1b0, e=0x7fffffffb780) at ../src/view/kateviewinternal.cpp:2290
#19 0x00007ffff1aa3a25 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () at /usr/lib64/libQt5Core.so.5
#20 0x00007ffff2e3a84c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5
#21 0x00007ffff2e407b0 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5
#22 0x00007ffff1aa3bf3 in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib64/libQt5Core.so.5
#23 0x00007ffff77a45c3 in QCoreApplication::sendEvent(QObject*, QEvent*) (receiver=0x7cc1b0, event=0x7fffffffb780) at /usr/include/qt5/QtCore/qcoreapplication.h:228
#24 0x00007ffff786cf68 in KateVi::InputModeManager::feedKeyPresses(QString const&) const (this=0x7ceac0, keyPresses=...) at ../src/vimode/inputmodemanager.cpp:235
#25 0x00007ffff7888f46 in KateVi::KeyMapper::playBackRejectedKeys() (this=0x84db10) at ../src/vimode/keymapper.cpp:69
#26 0x00007ffff7889226 in KateVi::KeyMapper::handleKeypress(QChar) (this=0x84db10, key=...) at ../src/vimode/keymapper.cpp:122
#27 0x00007ffff786c7b1 in KateVi::InputModeManager::handleKeypress(QKeyEvent const*) (this=0x7ceac0, e=0x7fffffffc200) at ../src/vimode/inputmodemanager.cpp:133
#28 0x00007ffff782f1fb in KateViInputMode::keyPress(QKeyEvent*) (this=0x94ced0, e=0x7fffffffc200) at ../src/inputmode/kateviinputmode.cpp:284
#29 0x00007ffff779d4ad in KateViewInternal::keyPressEvent(QKeyEvent*) (this=0x7cc1b0, e=0x7fffffffc200) at ../src/view/kateviewinternal.cpp:2378
#30 0x00007ffff779ceab in KateViewInternal::eventFilter(QObject*, QEvent*) (this=0x7cc1b0, obj=0x7cc1b0, e=0x7fffffffc200) at ../src/view/kateviewinternal.cpp:2290
#31 0x00007ffff1aa3a25 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () at /usr/lib64/libQt5Core.so.5
#32 0x00007ffff2e3a84c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5
#33 0x00007ffff2e407b0 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5
#34 0x00007ffff1aa3bf3 in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib64/libQt5Core.so.5
#35 0x00007ffff2e9327b in  () at /usr/lib64/libQt5Widgets.so.5
#36 0x00007ffff2e3a86c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5
#37 0x00007ffff2e3fb80 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQt5Widgets.so.5
#38 0x00007ffff1aa3bf3 in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib64/libQt5Core.so.5
#39 0x00007ffff269f031 in QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent*) () at /usr/lib64/libQt5Gui.so.5
#40 0x00007ffff26a3cd5 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /usr/lib64/libQt5Gui.so.5
#41 0x00007ffff268a8f8 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQt5Gui.so.5
#42 0x00007fffe5ce3d40 in  () at /usr/lib64/qt5/plugins/platforms/libqxcb.so
#43 0x00007fffecf88cc7 in g_main_context_dispatch () at /usr/lib64/libglib-2.0.so.0
#44 0x00007fffecf88ef8 in  () at /usr/lib64/libglib-2.0.so.0
#45 0x00007fffecf88f9c in g_main_context_iteration () at /usr/lib64/libglib-2.0.so.0
---Type <return> to continue, or q <return> to quit---
#46 0x00007ffff1af835f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQt5Core.so.5
#47 0x00007ffff1aa15ea in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQt5Core.so.5
#48 0x00007ffff1aa8d6d in QCoreApplication::exec() () at /usr/lib64/libQt5Core.so.5
#49 0x00007ffff7bc8e66 in kdemain(int, char**) (argc=1, argv=0x7fffffffd688) at ../kwrite/main.cpp:266
#50 0x0000000000400ba8 in main(int, char**) (argc=1, argv=0x7fffffffd688) at kwrite/kwrite_dummy.cpp:3
Comment 2 Dominik Haumann 2015-10-08 07:43:42 UTC
Cannot reproduce, can you try again?
Comment 3 Diego Gangl 2017-10-13 14:38:44 UTC
Cannot reproduce on 17.08.2
Comment 4 Christoph Feck 2017-10-25 14:39:21 UTC
Thanks for the update; let's assume it is fixed. If you get a crash with newer version, it is best to file a new ticket with an updated backtrace.