Bug 238708 - Crash viewing a inline opengpg signed message
Summary: Crash viewing a inline opengpg signed message
Status: RESOLVED FIXED
Alias: None
Product: kdepim
Classification: Applications
Component: libkpgp (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: Volker Krause
URL:
Keywords: akonadi-ports-regression
Depends on:
Blocks: 223438
  Show dependency treegraph
 
Reported: 2010-05-24 18:32 UTC by Olivier Trichet
Modified: 2010-05-27 21:29 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
message that causes the crash (3.91 KB, text/plain)
2010-05-24 18:58 UTC, Olivier Trichet
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Olivier Trichet 2010-05-24 18:32:36 UTC
Application: akonadiconsole (0.99)
KDE Platform Version: 4.4.80 (KDE 4.4.80 (KDE 4.5 Beta1)) (Compiled from sources)
Qt Version: 4.6.2
Operating System: Linux 2.6.33-2-amd64 x86_64
Distribution: Debian GNU/Linux testing (squeeze)

-- Information about the crash:
The Akonadi console immediatly crash when I open the message which I'll attach later to this report. This is also reproducible in KNode.
The crash happens every time this specific message is displayed. The key that signed the message is in my keyring.

In the method BaseG::publicKeys( const QStringList & ), changing "std::sort(...)" to "qSort(...)" works around this issue.

If you need more information, feel free to ask.


kDebug trace:
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::Module::checkForPGP: Kpgp: gpg found
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::Module::assignPGPBase: Kpgp: assign pgp - auto
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::Module::assignPGPBase: Kpgp: assign pgp - default
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::Module::assignPGPBase: Kpgp: pgpBase is gpg
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::Base::runGpg: GnuPG exited with exit status 0
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::Base::runGpg: gpg stderr: "akonadiconsole(4261)/kdepimlibs (kpgp) Kpgp::Base::runGpg: pgp cmd = LANGUAGE=C gpg --version
"
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::BaseG::BaseG: found GnuPG "1.4.10"
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::Base::runGpg: GnuPG exited with exit status 1
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::Base::runGpg: gpg stderr: "akonadiconsole(4263)/kdepimlibs (kpgp) Kpgp::Base::runGpg: pgp cmd = LANGUAGE=C gpg --batch --decrypt
gpg: Signature made lun. 17 mai 2010 20:00:01 CEST using DSA key ID 9B7C328D
gpg: BAD signature from "Luk Claes <luk@debian.org>"
"
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::BaseG::decrypt: Message was signed on ' "lun. 17 mai 2010 20:00:01 CEST" '
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::BaseG::decrypt: Message was signed with key ' "9B7C328D" '
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::Base::runGpg: GnuPG exited with exit status 0
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::Base::runGpg: gpg stderr: "akonadiconsole(4265)/kdepimlibs (kpgp) Kpgp::Base::runGpg: pgp cmd = LANGUAGE=C gpg --batch --list-public-keys --with-fingerprint --with-colons --fixed-list-mode --no-expensive-trust-checks
"
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::BaseG::parseKeyData: Unknown key capability
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::BaseG::parseKeyData: Unknown key capability
[.......]
akonadiconsole(4255)/kdepimlibs (kpgp) Kpgp::BaseG::parseKeyData: Unknown key capability
KCrash: Application 'akonadiconsole' crashing...

The crash can be reproduced every time.

-- Backtrace:
Application: Akonadi Console (akonadiconsole), signal: Segmentation fault
The current source language is "auto; currently c".
[Current thread is 1 (Thread 0x7f5de7d9c750 (LWP 4111))]

Thread 2 (Thread 0x7f5dcd4e9910 (LWP 4114)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:261
#1  0x00007f5dddbba606 in ?? () from /usr/lib/libQtWebKit.so.4
#2  0x00007f5dddbba649 in ?? () from /usr/lib/libQtWebKit.so.4
#3  0x00007f5de22be73a in start_thread (arg=<value optimized out>) at pthread_create.c:300
#4  0x00007f5de0ba869d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#5  0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7f5de7d9c750 (LWP 4111)):
[KCrash Handler]
#6  0x00007f5ddfaa3e2a in QListData::isEmpty (this=0x4337423922003031) at /usr/include/qt4/QtCore/qlist.h:91
#7  0x00007f5ddfaa5392 in QList<Kpgp::UserID*>::isEmpty (this=0x4337423922003031) at /usr/include/qt4/QtCore/qlist.h:134
#8  0x00007f5ddfaa411c in Kpgp::Key::primaryUserID (this=0x4337423922003021) at /home/kde/dev/src/kdepim/libkpgp/kpgpkey.h:779
#9  0x00007f5ddfab32f9 in Kpgp::KeyCompare (left=0x29861b0, right=0x4337423922003021) at /home/kde/dev/src/kdepim/libkpgp/kpgpkey.h:847
#10 0x00007f5ddfabcb0d in std::__unguarded_linear_insert<QList<Kpgp::Key*>::iterator, Kpgp::Key*, bool (*)(Kpgp::Key*, Kpgp::Key*)> (__last=..., __val=0x29861b0, 
    __comp=0x7f5ddfab32d5 <Kpgp::KeyCompare(Kpgp::Key*, Kpgp::Key*)>) at /usr/include/c++/4.4/bits/stl_algo.h:2084
#11 0x00007f5ddfabc71b in std::__unguarded_insertion_sort<QList<Kpgp::Key*>::iterator, bool (*)(Kpgp::Key*, Kpgp::Key*)> (__first=..., __last=..., 
    __comp=0x7f5ddfab32d5 <Kpgp::KeyCompare(Kpgp::Key*, Kpgp::Key*)>) at /usr/include/c++/4.4/bits/stl_algo.h:2161
#12 0x00007f5ddfabc20b in std::__final_insertion_sort<QList<Kpgp::Key*>::iterator, bool (*)(Kpgp::Key*, Kpgp::Key*)> (__first=..., __last=..., 
    __comp=0x7f5ddfab32d5 <Kpgp::KeyCompare(Kpgp::Key*, Kpgp::Key*)>) at /usr/include/c++/4.4/bits/stl_algo.h:2194
#13 0x00007f5ddfabbec8 in std::sort<QList<Kpgp::Key*>::iterator, bool (*)(Kpgp::Key*, Kpgp::Key*)> (__first=..., __last=..., __comp=0x7f5ddfab32d5 <Kpgp::KeyCompare(Kpgp::Key*, Kpgp::Key*)>)
    at /usr/include/c++/4.4/bits/stl_algo.h:5260
#14 0x00007f5ddfab97b8 in Kpgp::BaseG::publicKeys (this=0x294f410, patterns=...) at /home/kde/dev/src/kdepim/libkpgp/kpgpbaseG.cpp:442
#15 0x00007f5ddfab1d67 in Kpgp::Module::readPublicKeys (this=0x294cea0, reread=false) at /home/kde/dev/src/kdepim/libkpgp/kpgp.cpp:1532
#16 0x00007f5ddfaaddf0 in Kpgp::Module::publicKey (this=0x294cea0, keyID=...) at /home/kde/dev/src/kdepim/libkpgp/kpgp.cpp:742
#17 0x00007f5ddfaae233 in Kpgp::Module::keyTrust (this=0x294cea0, keyID=...) at /home/kde/dev/src/kdepim/libkpgp/kpgp.cpp:783
#18 0x00007f5de6266257 in MessageViewer::ObjectTreeParser::writeBodyStr (this=0x7fffd3503910, aStr=..., aCodec=0x1f8ecd0, fromAddress=..., inlineSignatureState=@0x7fffd350352c, 
    inlineEncryptionState=@0x7fffd3503528, decorate=true) at /home/kde/dev/src/kdepim/messageviewer/objecttreeparser.cpp:2932
#19 0x00007f5de625eee1 in MessageViewer::ObjectTreeParser::writeBodyString (this=0x7fffd3503910, bodyString=..., fromAddress=..., codec=0x1f8ecd0, result=..., decorate=true)
    at /home/kde/dev/src/kdepim/messageviewer/objecttreeparser.cpp:2087
#20 0x00007f5de625785e in MessageViewer::ObjectTreeParser::processTextPlainSubtype (this=0x7fffd3503910, curNode=0x28ee4a0, result=...)
    at /home/kde/dev/src/kdepim/messageviewer/objecttreeparser.cpp:1241
#21 0x00007f5de626e71d in process (this=0x2921ef0, otp=0x7fffd3503910, node=0x28ee4a0, result=...) at /home/kde/dev/src/kdepim/messageviewer/bodypartformatter.cpp:106
#22 0x00007f5de6250c45 in MessageViewer::ObjectTreeParser::parseObjectTreeInternal (this=0x7fffd3503910, node=0x28ee4a0) at /home/kde/dev/src/kdepim/messageviewer/objecttreeparser.cpp:308
#23 0x00007f5de62503bd in MessageViewer::ObjectTreeParser::parseObjectTree (this=0x7fffd3503910, node=0x28ee4a0) at /home/kde/dev/src/kdepim/messageviewer/objecttreeparser.cpp:223
#24 0x00007f5de6214d3a in MessageViewer::ViewerPrivate::parseContent (this=0x230b600, content=0x28ee4a0) at /home/kde/dev/src/kdepim/messageviewer/viewer_p.cpp:982
#25 0x00007f5de6213b77 in MessageViewer::ViewerPrivate::displayMessage (this=0x230b600) at /home/kde/dev/src/kdepim/messageviewer/viewer_p.cpp:847
#26 0x00007f5de621ecce in MessageViewer::ViewerPrivate::updateReaderWin (this=0x230b600) at /home/kde/dev/src/kdepim/messageviewer/viewer_p.cpp:2060
#27 0x00007f5de621dd39 in MessageViewer::ViewerPrivate::update (this=0x230b600, updateMode=MessageViewer::Viewer::Force) at /home/kde/dev/src/kdepim/messageviewer/viewer_p.cpp:1907
#28 0x00007f5de6216aa5 in MessageViewer::ViewerPrivate::setMessageInternal (this=0x230b600, message=..., updateMode=MessageViewer::Viewer::Force)
    at /home/kde/dev/src/kdepim/messageviewer/viewer_p.cpp:1316
#29 0x00007f5de6216e50 in MessageViewer::ViewerPrivate::setMessageItem (this=0x230b600, item=..., updateMode=MessageViewer::Viewer::Force) at /home/kde/dev/src/kdepim/messageviewer/viewer_p.cpp:1337
#30 0x00007f5de622fc8c in MessageViewer::Viewer::setMessageItem (this=0x230b2a0, item=..., updateMode=MessageViewer::Viewer::Force) at /home/kde/dev/src/kdepim/messageviewer/viewer.cpp:84
#31 0x0000000000427e72 in BrowserWidget::setItem (this=0x2294860, item=...) at /home/kde/dev/src/kdepim/akonadiconsole/browserwidget.cpp:274
#32 0x0000000000427c40 in BrowserWidget::itemFetchDone (this=0x2294860, job=0x2694d20) at /home/kde/dev/src/kdepim/akonadiconsole/browserwidget.cpp:256
#33 0x000000000042ae29 in BrowserWidget::qt_metacall (this=0x2294860, _c=QMetaObject::InvokeMetaMethod, _id=2, _a=0x285bd50) at /home/kde/dev/build/kdepim/akonadiconsole/browserwidget.moc:93
#34 0x00007f5de2661b59 in QObject::event (this=0x2294860, e=0x29175f0) at kernel/qobject.cpp:1248
#35 0x00007f5de182a29f in QWidget::event (this=0x2294860, event=0x29175f0) at kernel/qwidget.cpp:8455
#36 0x00007f5de17d48fc in QApplicationPrivate::notify_helper (this=0x1fa25c0, receiver=0x2294860, e=0x29175f0) at kernel/qapplication.cpp:4300
#37 0x00007f5de17daddb in QApplication::notify (this=0x7fffd35050b0, receiver=0x2294860, e=0x29175f0) at kernel/qapplication.cpp:4183
#38 0x00007f5de355e7a6 in KApplication::notify (this=0x7fffd35050b0, receiver=0x2294860, event=0x29175f0) at /home/kde/dev/src/kdelibs/kdeui/kernel/kapplication.cpp:302
#39 0x00007f5de2651f1c in QCoreApplication::notifyInternal (this=0x7fffd35050b0, receiver=0x2294860, event=0x29175f0) at kernel/qcoreapplication.cpp:704
#40 0x00007f5de2654697 in QCoreApplication::sendEvent (receiver=0x0, event_type=<value optimized out>, data=0x1f881a0) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:215
#41 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=<value optimized out>, data=0x1f881a0) at kernel/qcoreapplication.cpp:1345
#42 0x00007f5de267b833 in QCoreApplication::sendPostedEvents (s=<value optimized out>) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:220
#43 postEventSourceDispatch (s=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:276
#44 0x00007f5dd8ffa6c2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#45 0x00007f5dd8ffe538 in ?? () from /lib/libglib-2.0.so.0
#46 0x00007f5dd8ffe6ec in g_main_context_iteration () from /lib/libglib-2.0.so.0
#47 0x00007f5de267b373 in QEventDispatcherGlib::processEvents (this=0x1f87870, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:412
#48 0x00007f5de18843de in QGuiEventDispatcherGlib::processEvents (this=0x4337423922003031, flags=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:204
#49 0x00007f5de2650842 in QEventLoop::processEvents (this=<value optimized out>, flags=) at kernel/qeventloop.cpp:149
#50 0x00007f5de2650c1c in QEventLoop::exec (this=0x7fffd3505020, flags=) at kernel/qeventloop.cpp:201
#51 0x00007f5de265495b in QCoreApplication::exec () at kernel/qcoreapplication.cpp:981
#52 0x00000000004421fe in main (argc=1, argv=0x7fffd3505328) at /home/kde/dev/src/kdepim/akonadiconsole/main.cpp:48
The current source language is "auto; currently asm".
The current source language is "auto; currently c".

Reported using DrKonqi
Comment 1 Olivier Trichet 2010-05-24 18:58:23 UTC
Created attachment 43851 [details]
message that causes the crash
Comment 2 Thomas McGuire 2010-05-24 21:36:53 UTC
Indeed, any inline openpgp signed message seems to crash the message viewer.

Volker, could this be a result of the recent Qt4 porting of Kpgp?
Comment 3 Thomas McGuire 2010-05-24 21:37:52 UTC
Also CC'ing Andras just in case.
Comment 4 Till Adam 2010-05-27 21:29:24 UTC
SVN commit 1131243 by tilladam:

Fix porting bug to make Comparator actually compare correctly.

This was crashing std::sort which apparenty for optimization reasons
requires a < b to imply !(b < a). qSort, on the other hand, avoids the
problem. The crash only showed up with sufficiently large keyrings, as
apparently std::sort, likely again for optimization reasons, uses a
simpler sort for shorter containers, which doesn't run into this issue.
Fun bug, took Volker and me most of the train ride from Osnabrueck to
Berlin to figure out why and how this happens, boring our travel
companion to tears in the process. Geek out!

BUG: 238708

 M  +2 -1      kpgpkey.h  


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