Bug 156875 - crash when opening a deleted keypair
Summary: crash when opening a deleted keypair
Status: RESOLVED FIXED
Alias: None
Product: kgpg
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: unspecified Linux
: NOR crash
Target Milestone: ---
Assignee: Rolf Eike Beer
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-01-28 22:59 UTC by Oliver Putz
Modified: 2008-03-25 19:16 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments
Video showing how to reproduce bug# 156875 (682.14 KB, video/x-theora+ogg)
2008-03-19 01:49 UTC, Oliver Putz
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Oliver Putz 2008-01-28 22:59:28 UTC
Version:           1.9.1 (using 4.00.80 (KDE 4.0.80 >= 20080104), Gentoo)
Compiler:          i686-pc-linux-gnu-gcc
OS:                Linux (i686) release 2.6.23-gentoo-r3

When you delete a keypair in kgpg, the GUI is not updated and still shows the now deleted keypair. If you try to access that keypair, kgpg crashes.

Steps to reproduce:
1) Delete a keypair (note that the keypair is still shown in kgpg)
2) Expand the deleted keypair (e.g. double click on it)


Backtrace:
Application: KGpg (kgpg), signal SIGABRT
Using host libthread_db library "/lib/libthread_db.so.1".
[Thread debugging using libthread_db enabled]
[New Thread 0xb5f996d0 (LWP 14475)]
[New Thread 0xb4b25b90 (LWP 14492)]
[KCrash handler]
#6  0xffffe410 in __kernel_vsyscall ()
#7  0xb62271f1 in *__GI_raise (sig=6)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#8  0xb62289b8 in *__GI_abort () at abort.c:88
#9  0xb7c98265 in qt_message_output (msgType=QtFatalMsg, 
    buf=0xbfb3c95c "ASSERT failure in QList<T>::at: \"index out of range\", file /usr/include/qt4/QtCore/qlist.h, line 384") at global/qglobal.cpp:2160
#10 0xb7c9832a in qFatal (
    msg=0xb7d9f7f4 "ASSERT failure in %s: \"%s\", file %s, line %d")
    at global/qglobal.cpp:2392
#11 0xb7c9837c in qt_assert_x (where=0x80e6efb "QList<T>::at", 
    what=0x80e6ee8 "index out of range", 
    file=0x80e6ec8 "/usr/include/qt4/QtCore/qlist.h", line=384)
    at global/qglobal.cpp:1925
#12 0x08074af9 in QList<KgpgCore::KgpgKey>::at (this=0xbfb3ea08, i=0)
    at /usr/include/qt4/QtCore/qlist.h:384
#13 0x080d7f1e in KGpgKeyNode::readChildren (this=0x8376508)
    at /var/tmp/portage/kde-base/kdeutils-9999.4/work/kdeutils-9999.4/kgpg/kgpgitemnode.cpp:211
#14 0x080d66a6 in KGpgExpandableNode::getChildCount (this=0x8376508)
    at /var/tmp/portage/kde-base/kdeutils-9999.4/work/kdeutils-9999.4/kgpg/kgpgitemnode.cpp:61
#15 0xb6a99680 in QSortFilterProxyModelPrivate::create_mapping (
    this=0x81c3d30, source_parent=@0xbfb3eb4c)
    at itemviews/qsortfilterproxymodel.cpp:258
#16 0xb6a9b21b in QSortFilterProxyModel::rowCount (this=0x81c2808, 
    parent=@0xbfb3ec0c) at itemviews/qsortfilterproxymodel.cpp:1458
#17 0xb6a532f0 in QTreeViewPrivate::layout (this=0x81c4328, i=1)
    at itemviews/qtreeview.cpp:2758
#18 0xb6a536bf in QTreeViewPrivate::expand (this=0x81c4328, item=1, 
    emitSignal=true) at itemviews/qtreeview.cpp:2562
#19 0xb6a54a1d in QTreeView::mousePressEvent (this=0x81c4308, 
    event=0xbfb3f694) at itemviews/qtreeview.cpp:1572
#20 0xb65a09be in QWidget::event (this=0x81c4308, event=0xbfb3f694)
    at kernel/qwidget.cpp:6134
#21 0xb68e3073 in QFrame::event (this=0x81c4308, e=0xbfb3f694)
    at widgets/qframe.cpp:655
#22 0xb697b7ec in QAbstractScrollArea::viewportEvent (this=0x388b, e=0x6)
    at widgets/qabstractscrollarea.cpp:924
#23 0xb6a175d0 in QAbstractItemView::viewportEvent (this=0x81c4308, 
    event=0xbfb3f694) at itemviews/qabstractitemview.cpp:1369
#24 0xb6a50cc2 in QTreeView::viewportEvent (this=0x81c4308, event=0xbfb3f694)
    at itemviews/qtreeview.cpp:1203
#25 0xb697d6b2 in QAbstractScrollAreaFilter::eventFilter (this=0x81c5488, 
    o=0x81c5400, e=0xbfb3f694) at widgets/qabstractscrollarea_p.h:93
#26 0xb654dd9b in QApplicationPrivate::notify_helper (this=0x8110e50, 
    receiver=0x81c5400, e=0xbfb3f694) at kernel/qapplication.cpp:3548
#27 0xb654fa2c in QApplication::notify (this=0x810fe20, receiver=0x81c5400, 
    e=0xbfb3f694) at kernel/qapplication.cpp:3255
#28 0xb78ee543 in KApplication::notify (this=0x810fe20, receiver=0x81c5400, 
    event=0xbfb3f694)
    at /var/tmp/portage/kde-base/kdelibs-9999.4/work/kdelibs-9999.4/kdeui/kernel/kapplication.cpp:310
#29 0xb7d6ad7b in QCoreApplication::notifyInternal (this=0x810fe20, 
    receiver=0x81c5400, event=0xbfb3f694) at kernel/qcoreapplication.cpp:530
#30 0xb65b3628 in QETWidget::translateMouseEvent (this=0x81c5400, 
    event=0xbfb3fa58)
    at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:203
#31 0xb65b1e8e in QApplication::x11ProcessEvent (this=0x810fe20, 
    event=0xbfb3fa58) at kernel/qapplication_x11.cpp:2913
#32 0xb65d7c45 in QEventDispatcherX11::processEvents (this=0x810fde8, 
    flags=@0xbfb3fb44) at kernel/qeventdispatcher_x11.cpp:125
#33 0xb7d6a191 in QEventLoop::processEvents (this=0xbfb3fbb0, 
    flags=@0xbfb3fb78) at kernel/qeventloop.cpp:140
#34 0xb7d6a29a in QEventLoop::exec (this=0xbfb3fbb0, flags=@0xbfb3fbb8)
    at kernel/qeventloop.cpp:186
#35 0xb7d6c626 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:759
#36 0xb654d487 in QApplication::exec () at kernel/qapplication.cpp:3053
#37 0x080a4204 in main (argc=3, argv=0xbfb3fd94)
    at /var/tmp/portage/kde-base/kdeutils-9999.4/work/kdeutils-9999.4/kgpg/main.cpp:59
#38 0xb6213fdc in __libc_start_main (main=0x80a3a70 <main>, argc=3, 
    ubp_av=0xbfb3fd94, init=0x80e5290 <__libc_csu_init>, 
    fini=0x80e5280 <__libc_csu_fini>, rtld_fini=0xb7fdc100 <_dl_fini>, 
    stack_end=0xbfb3fd8c) at libc-start.c:229
#39 0x08069111 in _start ()
#0  0xffffe410 in __kernel_vsyscall ()
Comment 1 Rolf Eike Beer 2008-02-04 20:22:49 UTC
how did you actually manage the keypair not to be deleted from the view? If I try to reproduce they get deleted also from the view.
Comment 2 Oliver Putz 2008-02-05 14:06:12 UTC
Hm, I just clicked on "delete keypair" :-) The keypair in question then did not get deleted from the view. I'll attach a little video that shows what I do. The video is with kdeutils r771045.
Comment 3 Oliver Putz 2008-03-19 01:49:33 UTC
Created attachment 23955 [details]
Video showing how to reproduce bug# 156875

Going through my old bugrepors I just saw that I never uploaded the promised
video for this crash. As this bug is still valid in a current SVN build, I
attached a video on how to reproduce the crash.
Comment 4 Rolf Eike Beer 2008-03-19 07:17:23 UTC
Please start KGpg from a terminal and put the output here when you let it crash.
Comment 5 Oliver Putz 2008-03-19 12:49:57 UTC
Hi, here is the konsole output. Regrettably its not too verbose. If there is a possibility to make kgpg print out more info, just tell me and I'll re-crash it.

kdesvn@Remus ~ $ kgpg
kgpg(5817)/kdecore (KLocale) KLocalePrivate::initEncoding:  Defaulting to ISO 8859-1 encoding.
kgpg(5817) KgpgAppletApp::newInstance: New instance
kgpg(5817) KgpgAppletApp::newInstance: Starting KGpg
Link points to "/tmp/kdesvn-kde4/kde-kdesvn"
kgpg(5817)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::KCoreConfigSkeleton: Creating KCoreConfigSkeleton ( 0x81bcf38 )
kgpg(5817)/kdecore (KConfigSkeleton) KCoreConfigSkeleton::readConfig: KCoreConfigSkeleton::readConfig()
QSystemTrayIcon::setVisible: No Icon set
kdesvn@Remus ~ $ kgpg(5817)/kdeui (KNotification) KNotification::slotReceivedId: 0
kgpg(5817)/kdeui (KNotification) KNotification::~KNotification: 0
ASSERT failure in QList<T>::at: "index out of range", file /usr/include/qt4/QtCore/qlist.h, line 393
KCrash: crashing... crashRecursionCounter = 2
KCrash: Application Name = kgpg path = <unknown> pid = 5817
sock_file=/home/kdesvn/.kde4/socket-Remus/kdeinit4__0
Warning: connect() failed: : No such file or directory
KCrash cannot reach kdeinit, launching directly.
drkonqi(5830)/kdecore (KLocale) KLocalePrivate::initEncoding:  Defaulting to ISO 8859-1 encoding.
Comment 6 Rolf Eike Beer 2008-03-25 19:16:10 UTC
SVN commit 789986 by dakon:

Implement deleting a key pair by deleting the key pair

Weird, isn't it? If you delete a public key (which may or may be not a part 
of a key pair) you have to invalidate all signatures from this key. Until now 
after deleting a secret key all secret keys were simply reloaded. This was 
wrong in multiple different ways as it did not do everything expected. Also 
it is inefficient to reload multiple keys. Now that we have notifications 
between public keys and signature it's much cleaner: delete the key node if 
it is gone from keyring and that's it.

BUG:156875

This one should be really gone now. There is no chance that the key pair is 
still there if the key is deleted. At least I hope so ;)


 M  +19 -4     keysmanager.cpp  
 M  +2 -1      keysmanager.h  
 M  +1 -1      kgpgitemmodel.cpp  
 M  +1 -1      kgpgitemmodel.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=789986