Bug 226898

Summary: crash of plasma desktop when adding picture slideshow with invalid files
Product: [Plasma] plasma4 Reporter: Hannes H <bugzilla>
Component: widget-frameAssignee: Plasma Bugs List <plasma-bugs>
Status: RESOLVED FIXED    
Severity: crash CC: annma, dwarthog
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: FreeBSD Ports   
OS: FreeBSD   
Latest Commit: Version Fixed In:

Description Hannes H 2010-02-14 22:19:16 UTC
Version:            (using KDE 4.4.0)
OS:                FreeBSD
Installed from:    FreeBSD Ports

howto reproduce:
1) make a directory
2) add a symbolic link called foobar.jpg to invalid place
3) add the pciture frame plasmoid
4) set it to slideshow, add the directory
5) watch it crash ;-)

Backtrace below.

I was just wondering, is plasma designed, so that every plasmoid runs in-process? No offence, but is that good? I mean, there is more and more plasmoids around now, and although kde-stuf is usually good quality software (from my POV), you will not be able to prevent people from writing crappy plasmoids. At least they should kill the rest of the desktop…

Anyway, sorry for the rant and thanks for 44! Looking really nice!

Application: Plasma arbetsyta (kdeinit4), signal: Segmentation fault: 11
[Current thread is 1 (Thread 8063ae040 (LWP 100400))]

Thread 4 (Thread 8062041c0 (LWP 100156)):
[KCrash Handler]
#6  0x00000008035b4c56 in memmove () from /lib/libc.so.7
#7  0x0000000801eb9e8d in QListData::remove () from /usr/local/lib/qt4/libQtCore.so.4
#8  0x0000000801eb9eeb in QListData::erase () from /usr/local/lib/qt4/libQtCore.so.4
#9  0x000000081f6166c3 in KPluginFactory::createInstance<Frame, QObject> () from /usr/local/kde4/lib/kde4/plasma_applet_frame.so
#10 0x000000081f611a0a in qt_plugin_instance () from /usr/local/kde4/lib/kde4/plasma_applet_frame.so
#11 0x000000081f612e97 in qt_plugin_instance () from /usr/local/kde4/lib/kde4/plasma_applet_frame.so
#12 0x000000081f61310d in qt_plugin_instance () from /usr/local/kde4/lib/kde4/plasma_applet_frame.so
#13 0x0000000801fa7e3c in QMetaObject::activate () from /usr/local/lib/qt4/libQtCore.so.4
#14 0x000000080180c998 in KDialog::slotButtonClicked () from /usr/local/kde4/lib/libkdeui.so.7
#15 0x000000080180e0b8 in KDialog::qt_metacall () from /usr/local/kde4/lib/libkdeui.so.7
#16 0x000000080190fd76 in KPageDialog::qt_metacall () from /usr/local/kde4/lib/libkdeui.so.7
#17 0x00000008017f4355 in KConfigDialog::qt_metacall () from /usr/local/kde4/lib/libkdeui.so.7
#18 0x0000000801fa7e3c in QMetaObject::activate () from /usr/local/lib/qt4/libQtCore.so.4
#19 0x0000000801fadb9e in QSignalMapper::mapped () from /usr/local/lib/qt4/libQtCore.so.4
#20 0x0000000801fae372 in QSignalMapper::map () from /usr/local/lib/qt4/libQtCore.so.4
#21 0x0000000801fae63c in QSignalMapper::qt_metacall () from /usr/local/lib/qt4/libQtCore.so.4
#22 0x0000000801fa7e3c in QMetaObject::activate () from /usr/local/lib/qt4/libQtCore.so.4
#23 0x0000000802c49682 in QAbstractButton::clicked () from /usr/local/lib/qt4/libQtGui.so.4
#24 0x000000080295a18b in QAbstractButtonPrivate::emitClicked () from /usr/local/lib/qt4/libQtGui.so.4
#25 0x000000080295b335 in QAbstractButtonPrivate::click () from /usr/local/lib/qt4/libQtGui.so.4
#26 0x000000080295b57f in QAbstractButton::mouseReleaseEvent () from /usr/local/lib/qt4/libQtGui.so.4
#27 0x00000008025f8c69 in QWidget::event () from /usr/local/lib/qt4/libQtGui.so.4
#28 0x000000080295a740 in QAbstractButton::event () from /usr/local/lib/qt4/libQtGui.so.4
#29 0x00000008029f6c6e in QPushButton::event () from /usr/local/lib/qt4/libQtGui.so.4
#30 0x00000008025a037f in QApplicationPrivate::notify_helper () from /usr/local/lib/qt4/libQtGui.so.4
Comment 1 Anne-Marie Mahfouf 2010-02-15 08:47:22 UTC
Can you please install the debug packages and reproduce to get a better backtrace? What do you mean by
2) add a symbolic link called foobar.jpg to invalid place

I don't think this plasmoid crappy by the way. Can you try the desktop wallpaper slideshow with the same steps to see if it crashes.
Comment 2 Hannes H 2010-02-15 09:10:25 UTC
Well, adding more debug, means rebuilding all of KDE for me, which I would rather not do now, as I depend on the computer working.

> What do you mean by
>> 2) add a symbolic link called foobar.jpg to invalid place

mkdir /tmp/foodir
ln -s /nonexistant /tmp/foodir/pic1.jpg

Add /tmp/foodir as only directory to the plasmoid, press OK → crash.

This is not reproducable with wallpaper slideshow.

Oh, and I didn't say the plasmoid was crap. On the contraray, I like it and I want to use it, thats why I spend time on writing bug-reports.
Comment 3 Anne-Marie Mahfouf 2010-02-15 10:19:52 UTC
Backtrace:

Application: Plasma Workspace (plasma-desktop), signal: Aborted
[KCrash Handler]
#6  0xffffe424 in __kernel_vsyscall ()
#7  0xb58f0c00 in raise () from /lib/i686/libc.so.6
#8  0xb58f2668 in abort () from /lib/i686/libc.so.6
#9  0xb5bc1b72 in qt_message_output (msgType=QtFatalMsg, buf=0x9901d88 "ASSERT: \"!isEmpty()\" in file /usr/local/trunk-src/kde-qt/include/QtCore/../../src/corelib/tools/qlist.h, line 263")
    at global/qglobal.cpp:2250
#10 0xb5bc1d7c in qt_message (msgType=QtFatalMsg, msg=0xb5d7ea94 "ASSERT: \"%s\" in file %s, line %d", ap=0xbfc81d94 "À\a-šÜ\006-š\a\001") at global/qglobal.cpp:2296
#11 0xb5bc1dea in qFatal (msg=0xb5d7ea94 "ASSERT: \"%s\" in file %s, line %d") at global/qglobal.cpp:2479
#12 0xb5bc203e in qt_assert (assertion=0xa82d07c0 "!isEmpty()", file=0xa82d06dc "/usr/local/trunk-src/kde-qt/include/QtCore/../../src/corelib/tools/qlist.h", line=263) at global/qglobal.cpp:2013
#13 0xa82c8f7d in QList<int>::first (this=0x91908f8) at /usr/local/trunk-src/kde-qt/include/QtCore/../../src/corelib/tools/qlist.h:263
#14 0xa82c9095 in QList<int>::takeFirst (this=0x91908f8) at /usr/local/trunk-src/kde-qt/include/QtCore/../../src/corelib/tools/qlist.h:460
#15 0xa82c912c in KRandomSequence::randomize<int> (this=0xbfc81e64, list=@0x91908f8) at /usr/local/trunk/include/KDE/../krandomsequence.h:112
#16 0xa82c7ced in SlideShow::setDirs (this=0x91908e0, slideShowPath=@0x919c264, recursive=true) at /usr/local/trunk-src/kdeplasma-addons/applets/frame/slideshow.cpp:70
#17 0xa82c1665 in Frame::initSlideShow (this=0x919c220) at /usr/local/trunk-src/kdeplasma-addons/applets/frame/frame.cpp:554
#18 0xa82c23c7 in Frame::configAccepted (this=0x919c220) at /usr/local/trunk-src/kdeplasma-addons/applets/frame/frame.cpp:534
#19 0xa82c2bb4 in Frame::qt_metacall (this=0x919c220, _c=QMetaObject::InvokeMetaMethod, _id=3, _a=0xbfc8206c) at /home/annma/build/kdeplasma-addons/applets/frame/frame.moc:95
#20 0xb5cff5cf in QMetaObject::metacall (object=0x919c220, cl=QMetaObject::InvokeMetaMethod, idx=58, argv=0xbfc8206c) at kernel/qmetaobject.cpp:237
#21 0xb5d13e2b in QMetaObject::activate (sender=0x93eb928, m=0xb7355944, local_signal_index=9, argv=0x0) at kernel/qobject.cpp:3275
#22 0xb70d21f1 in KDialog::okClicked (this=0x93eb928) at /home/annma/build/kdelibs/kdeui/kdialog.moc:258
#23 0xb70d37a7 in KDialog::slotButtonClicked (this=0x93eb928, button=4) at /usr/local/trunk-src/kdelibs/kdeui/dialogs/kdialog.cpp:862
#24 0xb70d5fcb in KDialog::qt_metacall (this=0x93eb928, _c=QMetaObject::InvokeMetaMethod, _id=33, _a=0xbfc8227c) at /home/annma/build/kdelibs/kdeui/kdialog.moc:190
#25 0xb71b4dae in KPageDialog::qt_metacall (this=0x93eb928, _c=QMetaObject::InvokeMetaMethod, _id=69, _a=0xbfc8227c) at /home/annma/build/kdelibs/kdeui/kpagedialog.moc:70
#26 0xb70c36b8 in KConfigDialog::qt_metacall (this=0x93eb928, _c=QMetaObject::InvokeMetaMethod, _id=69, _a=0xbfc8227c) at /home/annma/build/kdelibs/kdeui/kconfigdialog.moc:84
#27 0xb5cff5cf in QMetaObject::metacall (object=0x93eb928, cl=QMetaObject::InvokeMetaMethod, idx=69, argv=0xbfc8227c) at kernel/qmetaobject.cpp:237
#28 0xb5d13e2b in QMetaObject::activate (sender=0x9614ab0, m=0xb5e43238, local_signal_index=0, argv=0xbfc8227c) at kernel/qobject.cpp:3275
#29 0xb5d1996c in QSignalMapper::mapped (this=0x9614ab0, _t1=4) at .moc/debug-shared/moc_qsignalmapper.cpp:101
#30 0xb5d19a81 in QSignalMapper::map (this=0x9614ab0, sender=0x96cd900) at kernel/qsignalmapper.cpp:266
#31 0xb5d19bb6 in QSignalMapper::map (this=0x9614ab0) at kernel/qsignalmapper.cpp:257
#32 0xb5d19d09 in QSignalMapper::qt_metacall (this=0x9614ab0, _c=QMetaObject::InvokeMetaMethod, _id=4, _a=0xbfc8240c) at .moc/debug-shared/moc_qsignalmapper.cpp:87
#33 0xb5cff5cf in QMetaObject::metacall (object=0x9614ab0, cl=QMetaObject::InvokeMetaMethod, idx=8, argv=0xbfc8240c) at kernel/qmetaobject.cpp:237
#34 0xb5d13e2b in QMetaObject::activate (sender=0x96cd900, m=0xb6b34c24, local_signal_index=2, argv=0xbfc8240c) at kernel/qobject.cpp:3275
#35 0xb68bb04a in QAbstractButton::clicked (this=0x96cd900, _t1=false) at .moc/debug-shared/moc_qabstractbutton.cpp:206
#36 0xb650c434 in QAbstractButtonPrivate::emitClicked (this=0x96cd948) at widgets/qabstractbutton.cpp:546
#37 0xb650d944 in QAbstractButtonPrivate::click (this=0x96cd948) at widgets/qabstractbutton.cpp:539
#38 0xb650dc80 in QAbstractButton::mouseReleaseEvent (this=0x96cd900, e=0xbfc82e14) at widgets/qabstractbutton.cpp:1121
#39 0xb60bf38d in QWidget::event (this=0x96cd900, event=0xbfc82e14) at kernel/qwidget.cpp:7978
#40 0xb650c3cb in QAbstractButton::event (this=0x96cd900, e=0xbfc82e14) at widgets/qabstractbutton.cpp:1080
#41 0xb65e2576 in QPushButton::event (this=0x96cd900, e=0xbfc82e14) at widgets/qpushbutton.cpp:679
#42 0xb6041096 in QApplicationPrivate::notify_helper (this=0x8fd11d0, receiver=0x96cd900, e=0xbfc82e14) at kernel/qapplication.cpp:4298
#43 0xb6041fa1 in QApplication::notify (this=0x8fc6268, receiver=0x96cd900, e=0xbfc82e14) at kernel/qapplication.cpp:3863
#44 0xb7172067 in KApplication::notify (this=0x8fc6268, receiver=0x96cd900, event=0xbfc82e14) at /usr/local/trunk-src/kdelibs/kdeui/kernel/kapplication.cpp:302
#45 0xb5cf7cb0 in QCoreApplication::notifyInternal (this=0x8fc6268, receiver=0x96cd900, event=0xbfc82e14) at kernel/qcoreapplication.cpp:704
#46 0xb605608d in QCoreApplication::sendSpontaneousEvent (receiver=0x96cd900, event=0xbfc82e14) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:218
#47 0xb6048bbe in QApplicationPrivate::sendMouseEvent (receiver=0x96cd900, event=0xbfc82e14, alienWidget=0x96cd900, nativeWidget=0x93eb928, buttonDown=0xb6b44b98, lastMouseReceiver=@0xb6b44b9c, 
    spontaneous=true) at kernel/qapplication.cpp:2961
#48 0xb60fed5a in QETWidget::translateMouseEvent (this=0x93eb928, event=0xbfc833b0) at kernel/qapplication_x11.cpp:4368
#49 0xb60ffde9 in QApplication::x11ProcessEvent (this=0x8fc6268, event=0xbfc833b0) at kernel/qapplication_x11.cpp:3379
#50 0xb613351d in x11EventSourceDispatch (s=0x8fd3ed8, callback=0, user_data=0x0) at kernel/qguieventdispatcher_glib.cpp:146
#51 0xb40ce7ca in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#52 0xb40d1ee8 in ?? () from /usr/lib/libglib-2.0.so.0
#53 0xb40d20a8 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#54 0xb5d321ba in QEventDispatcherGlib::processEvents (this=0x8faff40, flags={i = -1077398136}) at kernel/qeventdispatcher_glib.cpp:412
#55 0xb6132bb2 in QGuiEventDispatcherGlib::processEvents (this=0x8faff40, flags={i = -1077398088}) at kernel/qguieventdispatcher_glib.cpp:204
#56 0xb5cf4026 in QEventLoop::processEvents (this=0xbfc83658, flags={i = -1077398012}) at kernel/qeventloop.cpp:149
#57 0xb5cf4298 in QEventLoop::exec (this=0xbfc83658, flags={i = -1077397920}) at kernel/qeventloop.cpp:201
#58 0xb5cf8605 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:981
#59 0xb60441f8 in QApplication::exec () at kernel/qapplication.cpp:3577
#60 0xb7f30ff1 in kdemain (argc=1, argv=0xbfc83844) at /usr/local/trunk-src/kdebase/workspace/plasma/desktop/shell/main.cpp:118
#61 0x08048746 in main (argc=) at /home/annma/build/kdebase/workspace/plasma/desktop/shell/plasma-desktop_dummy.cpp:3

Duplicate of 226738 which has a patch in the waiting in KRandomSequence

*** This bug has been marked as a duplicate of bug 226738 ***
Comment 4 Anne-Marie Mahfouf 2010-02-15 10:26:45 UTC
You can add the patch from http://reviewboard.kde.org/r/2915/diff/#index_header in kdelibs/kdecore/util/krandomesequence.h and rebuild only kdelibs/kdecore, make install and then rebuild kdeplasma-addons/applets/frame and install it, restart plasma-desktop (kquitapp plasma-desktop and plasma-desktop in a terminal) and see if it indeed fixes it.
Comment 5 Hannes H 2010-02-15 15:41:04 UTC
Yes, that solves it. Thank you!
Comment 6 Anne-Marie Mahfouf 2010-02-16 16:23:47 UTC
SVN commit 1091033 by annma:

prevents to randomize an empty list, thanks Jaime for reviewing
Hannes, my previous patch was wrong and that one is correct
will backport to branch
BUG=226898
BUG=226738


 M  +7 -6      krandomsequence.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1091033
Comment 7 Jonathan Thomas 2010-02-25 19:05:11 UTC
*** Bug 228346 has been marked as a duplicate of this bug. ***
Comment 8 Aaron J. Seigo 2010-03-09 03:19:32 UTC
*** Bug 229896 has been marked as a duplicate of this bug. ***