Bug 386328 - Akregator crashes when opening configuration dialog if "Show Tray Icon" is disabled
Summary: Akregator crashes when opening configuration dialog if "Show Tray Icon" is di...
Status: RESOLVED FIXED
Alias: None
Product: akregator
Classification: Applications
Component: general (show other bugs)
Version: GIT (master)
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: kdepim bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-10-29 16:09 UTC by Omar Plummer
Modified: 2017-10-30 14:52 UTC (History)
0 users

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 Omar Plummer 2017-10-29 16:09:50 UTC
Crash happens when I attempt to access "Settings -> Configure Akregator..." menu.

If I edit .config5/akregatorrc and set "Show Tray icon" under [General] to 'true' instead of 'false', then it no longer crashes.

Actual version reported by 'akregator --version': akregator 5.6.40 alpha1

Git commit: 2bd8485fcb6969aa3985e8b5a9b4be62726d19a9


Partial GDB backtrace:

------

#0  QObjectPrivate::addConnection (this=0x1053c60, signal=signal@entry=12, c=c@entry=0x108d1f0) at kernel/qobject.cpp:401
#1  0x00007ffff2f557d0 in QObjectPrivate::connectImpl (sender=sender@entry=0x1091b30, signal_index=<optimized out>, receiver=receiver@entry=0x0, 
    slot=slot@entry=0x7fffffffbe10, slotObj=slotObj@entry=0x105f040, type=Qt::AutoConnection, types=0x0, 
    senderMetaObject=0x7fffdc4b7f60 <KCMultiDialog::staticMetaObject>) at kernel/qobject.cpp:4841
#2  0x00007ffff2f55aad in QObject::connectImpl (sender=0x1091b30, signal=<optimized out>, receiver=0x0, slot=0x7fffffffbe10, slotObj=0x105f040, type=Qt::AutoConnection, 
    types=0x0, senderMetaObject=0x7fffdc4b7f60 <KCMultiDialog::staticMetaObject>) at kernel/qobject.cpp:4784
#3  0x00007fffb25bfbd3 in QObject::connect<void (KCMultiDialog::*)(), void (Akregator::TrayIcon::*)()> (sender=0x1091b30, 
    signal=(void (KCMultiDialog::*)(KCMultiDialog * const)) 0x7fffdc280946 <KCMultiDialog::configCommitted()>, receiver=0x0, 
    slot=(void (Akregator::TrayIcon::*)(Akregator::TrayIcon * const)) 0x7ffff74b903c <Akregator::TrayIcon::settingsChanged()>, type=Qt::AutoConnection)
    at /opt/qt5.9/qtbase/src/corelib/kernel/qobject.h:259
#4  0x00007fffb25bbbf0 in Akregator::Part::showOptions (this=0x962f30) at /mnt/src/kde/src/kde/pim/akregator/src/akregator_part.cpp:659
#5  0x00007fffb25a06a0 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (Akregator::Part::*)()>::call(void (Akregator::Part::*)(), Akregator::Part*, void**) (f=(void (Akregator::Part::*)(Akregator::Part * const)) 0x7fffb25bba8c <Akregator::Part::showOptions()>, o=0x962f30, arg=0x7fffffffc090)
    at /opt/qt5.9/qtbase/src/corelib/kernel/qobjectdefs_impl.h:136
#6  0x00007fffb25a0235 in QtPrivate::FunctionPointer<void (Akregator::Part::*)()>::call<QtPrivate::List<>, void>(void (Akregator::Part::*)(), Akregator::Part*, void**) (
    f=(void (Akregator::Part::*)(Akregator::Part * const)) 0x7fffb25bba8c <Akregator::Part::showOptions()>, o=0x962f30, arg=0x7fffffffc090)
    at /opt/qt5.9/qtbase/src/corelib/kernel/qobjectdefs_impl.h:169
#7  0x00007fffb259f4fb in QtPrivate::QSlotObject<void (Akregator::Part::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (
    which=1, this_=0x9d02d0, r=0x962f30, a=0x7fffffffc090, ret=0x0) at /opt/qt5.9/qtbase/src/corelib/kernel/qobject_impl.h:120
#8  0x00007ffff2f53123 in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=0x962f30, this=<optimized out>)
    at ../../include/QtCore/../../src/corelib/kernel/qobject_impl.h:101
#9  QMetaObject::activate (sender=sender@entry=0x92c110, signalOffset=<optimized out>, local_signal_index=local_signal_index@entry=1, argv=argv@entry=0x7fffffffc090)
    at kernel/qobject.cpp:3749
#10 0x00007ffff2f535e9 in QMetaObject::activate (sender=sender@entry=0x92c110, m=m@entry=0x7ffff3dfa920 <QAction::staticMetaObject>,
Comment 1 Omar Plummer 2017-10-29 18:35:43 UTC
Ok, having now taken a look at the code, I realise that my wording of the original bug report was somewhat misguided.

What actually seems to be happening here is a null pointer de-reference. On line 659 of src/akregator_part.cpp, the Akregator systray icon instance (NULL when disabled) is being set up as the receiver of a signal.

By simply wrapping that call to "connect()" in a conditional that checks that the result of TrayIcon::getInstance() is not "falsy", the problem appears to be resolved.
Comment 2 Laurent Montel 2017-10-30 14:52:29 UTC
Git commit 683749ec6391fc7b1fe4e2a43f15f12ebe482f02 by Montel Laurent.
Committed on 30/10/2017 at 14:52.
Pushed by mlaurent into branch 'master'.

Fix Bug 386328 - Akregator crashes when opening configuration dialog if "Show Tray Icon" is disabled

M  +4    -2    src/akregator_part.cpp
M  +1    -1    src/trayicon.cpp

https://commits.kde.org/akregator/683749ec6391fc7b1fe4e2a43f15f12ebe482f02