Bug 493161 - Assert when exporting shortcuts "writing to a read-only group" in StandardShortcutsModel::exportToConfig line 76
Summary: Assert when exporting shortcuts "writing to a read-only group" in StandardSho...
Status: RESOLVED FIXED
Alias: None
Product: systemsettings
Classification: Applications
Component: kcm_keys (show other bugs)
Version: 6.1.5
Platform: Neon Linux
: NOR crash
Target Milestone: ---
Assignee: Plasma Bugs List
URL:
Keywords: drkonqi
Depends on:
Blocks:
 
Reported: 2024-09-15 15:11 UTC by Nicolas Fella
Modified: 2024-09-18 14:03 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report: https://crash-reports.kde.org/organizations/kde/issues/66755/events/31faddcd5c6842bf8eb38ead4c6102b3/


Attachments
New crash information added by DrKonqi (72.38 KB, text/plain)
2024-09-15 15:11 UTC, Nicolas Fella
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Nicolas Fella 2024-09-15 15:11:17 UTC
Application: systemsettings (6.1.5)

Qt Version: 6.7.2
Frameworks Version: 6.5.0
Operating System: Linux 6.8.0-40-generic x86_64
Windowing System: Wayland
Distribution: KDE neon 6.1
DrKonqi: 6.1.5 [CoredumpBackend]

-- Information about the crash:
- Open Shortcuts KCM
- Click Export
- Select all shortcuts
- Click Save Scheme
- Enter name
- Click Save

The crash can be reproduced every time.

-- Backtrace (Reduced):
#6  __pthread_kill_implementation (no_tid=0, signo=6, threadid=134020504160960) at ./nptl/pthread_kill.c:44
#7  __pthread_kill_internal (signo=6, threadid=134020504160960) at ./nptl/pthread_kill.c:78
#8  __GI___pthread_kill (threadid=134020504160960, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#9  0x000079e419042476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#10 0x000079e4190287f3 in __GI_abort () at ./stdlib/abort.c:79


Reported using DrKonqi
Comment 1 Nicolas Fella 2024-09-15 15:11:18 UTC
Created attachment 173689 [details]
New crash information added by DrKonqi

DrKonqi auto-attaching complete backtrace.
Comment 2 Nicolas Fella 2024-09-15 15:13:52 UTC
#6  __pthread_kill_implementation (no_tid=0, signo=6, threadid=134020504160960) at ./nptl/pthread_kill.c:44
#7  __pthread_kill_internal (signo=6, threadid=134020504160960) at ./nptl/pthread_kill.c:78
#8  __GI___pthread_kill (threadid=134020504160960, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#9  0x000079e419042476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#10 0x000079e4190287f3 in __GI_abort () at ./stdlib/abort.c:79
#11 0x000079e419cfdbca in qAbort () at ./src/corelib/global/qglobal.cpp:161
#12 0x000079e419cf875a in qt_message_fatal<QString&> (message=..., context=...) at ./src/corelib/global/qlogging.cpp:2025
#13 qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *) (msgType=msgType@entry=QtFatalMsg, context=..., msg=<optimized out>, ap=ap@entry=0x7ffe8da291e0) at ./src/corelib/global/qlogging.cpp:374
#14 0x000079e419cfe56d in QMessageLogger::fatal (this=<optimized out>, msg=<optimized out>) at ./src/corelib/global/qlogging.cpp:889
#15 0x000079e419cc2ce2 in qt_assert_x (where=where@entry=0x79e41c1b584a "KConfigGroup::writeEntry", what=what@entry=0x79e41c1b5863 "writing to a read-only group", file=file@entry=0x79e41c1b5784 "./src/core/kconfiggroup.cpp", line=line@entry=803) at ./src/corelib/global/qassert.cpp:77
#16 0x000079e41c1689a7 in KConfigGroup::writeEntry (this=0x7ffe8da293b0, key=0x5f150aa50f60 "Clear", value=..., flags=...) at ./src/core/kconfiggroup.cpp:803
#17 0x000079e41c183886 in KConfigGroup::writeEntry (this=this@entry=0x7ffe8da293b0, key=..., value=..., flags=flags@entry=...) at ./src/core/kconfiggroup.cpp:810
#18 0x000079e400172a34 in StandardShortcutsModel::exportToConfig (this=<optimized out>, config=...) at ./kcms/keys/standardshortcutsmodel.cpp:76
#19 0x000079e400152c9a in KCMKeys::writeScheme (url=..., this=0x5f150801dce0) at ./kcms/keys/kcm_keys.cpp:139
#20 KCMKeys::qt_static_metacall (_o=0x5f150801dce0, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at ./obj-x86_64-linux-gnu/kcms/keys/kcm_keys_autogen/include/moc_kcm_keys.cpp:204
#21 0x000079e400157800 in KCMKeys::qt_metacall (this=0x5f150801dce0, _c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x7ffe8da29a78) at ./obj-x86_64-linux-gnu/kcms/keys/kcm_keys_autogen/include/moc_kcm_keys.cpp:272
#22 0x000079e41aa72c43 in QQmlObjectOrGadget::metacall (this=0x7ffe8da29d30, type=QMetaObject::InvokeMetaMethod, index=<optimized out>, argv=<optimized out>) at ./src/qml/qml/qqmlobjectorgadget.cpp:14
#23 0x000079e41ab5b5bb in QV4::CallMethod (callType=QMetaObject::InvokeMetaMethod, callArgs=<optimized out>, engine=<optimized out>, argTypes=<optimized out>, argCount=<optimized out>, returnType=..., index=<optimized out>, object=...) at /usr/include/x86_64-linux-gnu/qt6/QtCore/qvarlengtharray.h:84
#24 QV4::CallPrecise (object=..., data=..., engine=<optimized out>, engine@entry=0x5f15079edfd0, callArgs=<optimized out>, callArgs@entry=0x79e4101bf5b0, callType=callType@entry=QMetaObject::InvokeMetaMethod) at ./src/qml/jsruntime/qv4qobjectwrapper.cpp:1950
#25 0x000079e41ab5cbc9 in operator() (__closure=<optimized out>) at ./src/qml/jsruntime/qv4qobjectwrapper.cpp:2924
#26 operator()<QV4::QObjectMethod::callInternal(const QV4::Value*, const QV4::Value*, int) const::<lambda()> > (call=..., __closure=<synthetic pointer>) at ./src/qml/jsruntime/qv4qobjectwrapper.cpp:2901
#27 QV4::QObjectMethod::callInternal (this=0x7ffe8da29e40, thisObject=<optimized out>, argv=0x79e4101bf550, argc=1) at ./src/qml/jsruntime/qv4qobjectwrapper.cpp:2924
#28 0x000079e41aca28c7 in QV4::Moth::VME::interpret (frame=0x7ffe8da2a200, engine=0x5f15079edfd0, code=0x5f150a22d860 "\220\a\264\032\344y") at ./src/qml/jsruntime/qv4vme_moth.cpp:798
#29 0x000079e41aca63a8 in QV4::Moth::VME::exec (frame=<optimized out>, engine=<optimized out>) at ./src/qml/jsruntime/qv4vme_moth.cpp:487
#30 0x000079e41abda65a in QV4::doCall (self=<optimized out>, thisObject=thisObject@entry=0x5f1507e010c0, argv=<optimized out>, argc=<optimized out>, context=<optimized out>) at ./src/qml/jsruntime/qv4function.cpp:54
#31 0x000079e41abdae18 in QV4::Function::call (this=this@entry=0x5f1507e010c0, thisObject=0x5f1507e010c0, argv=argv@entry=0x79e4101bf4f0, argc=argc@entry=0, context=context@entry=0x79e40001fe08) at ./src/qml/jsruntime/qv4function.cpp:79
#32 0x000079e41abe1e95 in operator() (argc=0, argv=0x79e4101bf4f0, thisObject=<optimized out>, __closure=<synthetic pointer>) at ./src/qml/jsruntime/qv4function.cpp:30
#33 QV4::convertAndCall<QV4::Function::call(QObject*, void**, const QMetaType*, int, QV4::ExecutionContext*)::<lambda(const QV4::Value*, const QV4::Value*, int)> > (call=..., argc=0, types=0x7ffe8da2a470, a=0x7ffe8da2a480, thisObject=<optimized out>, engine=<optimized out>) at ./src/qml/jsruntime/qv4jscall_p.h:202
#34 QV4::Function::call (this=0x5f1507e010c0, thisObject=<optimized out>, a=0x7ffe8da2a480, types=0x7ffe8da2a470, argc=0, context=0x79e40001fe08) at ./src/qml/jsruntime/qv4function.cpp:27
#35 0x000079e41ab2b7b9 in QQmlJavaScriptExpression::evaluate (this=<optimized out>, a=<optimized out>, types=<optimized out>, argc=<optimized out>) at ./src/qml/qml/qqmljavascriptexpression.cpp:270
#36 0x000079e41aaf10fb in QQmlBoundSignalExpression::evaluate (this=this@entry=0x5f150a872540, a=a@entry=0x0) at ./src/qml/qml/qqmlboundsignal.cpp:199
#37 0x000079e41aaf4d9b in QQmlBoundSignal_callback (a=0x0, e=0x5f1507ede500) at ./src/qml/qml/ftw/qqmlrefcount_p.h:73
#38 QQmlBoundSignal_callback (e=0x5f1507ede500, a=0x0) at ./src/qml/qml/qqmlboundsignal.cpp:293
#39 0x000079e41aa67568 in QQmlNotifier::emitNotify (endpoint=<optimized out>, a=0x0) at ./src/qml/qml/qqmlnotifier.cpp:70
#40 0x000079e419c635e5 in doActivate<false> (sender=0x5f150afd6e00, signal_index=3, argv=0x0) at ./src/corelib/kernel/qobject.cpp:3976
#41 0x000079e419c6381b in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=<optimized out>, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ./src/corelib/kernel/qobjectdefs_impl.h:469
#42 doActivate<false> (sender=0x5f150af59c20, signal_index=3, argv=0x7ffe8da2bfe8) at ./src/corelib/kernel/qobject.cpp:4086
#43 0x000079e419c6381b in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=<optimized out>, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ./src/corelib/kernel/qobjectdefs_impl.h:469
#44 doActivate<false> (sender=0x5f150bcd2260, signal_index=8, argv=0x7ffe8da2c0b8) at ./src/corelib/kernel/qobject.cpp:4086
#45 0x000079e41ba2b270 in QDialog::done (this=0x5f150bcd2260, r=1) at ./src/widgets/dialogs/qdialog.cpp:614
#46 0x000079e419c6381b in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=<optimized out>, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ./src/corelib/kernel/qobjectdefs_impl.h:469
#47 doActivate<false> (sender=0x5f1508c8d400, signal_index=11, argv=0x7ffe8da2c1b8) at ./src/corelib/kernel/qobject.cpp:4086
#48 0x000079e413cd7963 in KFileWidget::slotOk (this=<optimized out>) at ./src/filewidgets/kfilewidget.cpp:860
#49 0x000079e419c6381b in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=<optimized out>, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ./src/corelib/kernel/qobjectdefs_impl.h:469
#50 doActivate<false> (sender=0x5f150a871ac0, signal_index=9, argv=0x7ffe8da2c4e0) at ./src/corelib/kernel/qobject.cpp:4086
#51 0x000079e41bbab126 in QAbstractButton::clicked (this=<optimized out>, _t1=<optimized out>) at ./obj-x86_64-linux-gnu/src/widgets/Widgets_autogen/include/moc_qabstractbutton.cpp:324
#52 0x000079e41bba2d0e in QAbstractButtonPrivate::emitClicked (this=0x5f150a1f79c0) at ./src/widgets/widgets/qabstractbutton.cpp:381
#53 0x000079e41bba30ee in QAbstractButtonPrivate::click (this=0x5f150a1f79c0) at ./src/widgets/widgets/qabstractbutton.cpp:374
#54 0x000079e41bba3293 in QAbstractButton::mouseReleaseEvent (this=0x5f150a871ac0, e=0x7ffe8da2ca90) at ./src/widgets/widgets/qabstractbutton.cpp:976
#55 0x000079e41bc487ef in QWidget::event (this=0x5f150a871ac0, event=0x7ffe8da2ca90) at ./src/widgets/kernel/qwidget.cpp:9025
#56 0x000079e41bc0a1ab in QApplicationPrivate::notify_helper (this=this@entry=0x5f150751d2f0, receiver=receiver@entry=0x5f150a871ac0, e=e@entry=0x7ffe8da2ca90) at ./src/widgets/kernel/qapplication.cpp:3287
#57 0x000079e41bc0f051 in QApplication::notify (this=<optimized out>, receiver=<optimized out>, e=0x7ffe8da2ca90) at ./src/widgets/kernel/qapplication.cpp:2765
#58 0x000079e419ca1dd8 in QCoreApplication::notifyInternal2 (receiver=receiver@entry=0x5f150a871ac0, event=event@entry=0x7ffe8da2ca90) at ./src/corelib/kernel/qcoreapplication.cpp:1142
#59 0x000079e419ca1e2d in QCoreApplication::sendSpontaneousEvent (receiver=receiver@entry=0x5f150a871ac0, event=event@entry=0x7ffe8da2ca90) at ./src/corelib/kernel/qcoreapplication.cpp:1597
#60 0x000079e41bc098c8 in QApplicationPrivate::sendMouseEvent (receiver=0x5f150a871ac0, event=0x7ffe8da2ca90, alienWidget=0x5f150a871ac0, nativeWidget=0x5f150bcd2260, buttonDown=<optimized out>, lastMouseReceiver=..., spontaneous=true, onlyDispatchEnterLeave=false) at ./src/widgets/kernel/qapplication.cpp:2347
#61 0x000079e41bc56c57 in QWidgetWindow::handleMouseEvent (this=0x5f150bd01920, event=0x7ffe8da2ce30) at ./src/widgets/kernel/qwidgetwindow.cpp:649
#62 0x000079e41bc58f55 in QWidgetWindow::event (this=0x5f150bd01920, event=0x7ffe8da2ce30) at ./src/widgets/kernel/qwidgetwindow.cpp:263
#63 0x000079e41bc0a1ab in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x5f150bd01920, e=0x7ffe8da2ce30) at ./src/widgets/kernel/qapplication.cpp:3287
#64 0x000079e419ca1dd8 in QCoreApplication::notifyInternal2 (receiver=receiver@entry=0x5f150bd01920, event=event@entry=0x7ffe8da2ce30) at ./src/corelib/kernel/qcoreapplication.cpp:1142
#65 0x000079e419ca1e2d in QCoreApplication::sendSpontaneousEvent (receiver=receiver@entry=0x5f150bd01920, event=event@entry=0x7ffe8da2ce30) at ./src/corelib/kernel/qcoreapplication.cpp:1597
#66 0x000079e41a0f018b in QGuiApplicationPrivate::processMouseEvent (e=0x79e404005590) at ./src/gui/kernel/qguiapplication.cpp:2327
#67 0x000079e41a15017c in QWindowSystemInterface::sendWindowSystemEvents (flags=...) at ./src/gui/kernel/qwindowsysteminterface.cpp:1114
#68 0x000079e41a511e34 in userEventSourceDispatch (source=<optimized out>) at ./src/gui/platform/unix/qeventdispatcher_glib.cpp:38
#69 0x000079e418cc7d3b in g_main_dispatch (context=0x79e40c005040) at ../../../glib/gmain.c:3419
#70 g_main_context_dispatch (context=0x79e40c005040) at ../../../glib/gmain.c:4137
#71 0x000079e418d1d2b8 in g_main_context_iterate.constprop.0 (context=context@entry=0x79e40c005040, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4213
#72 0x000079e418cc53e3 in g_main_context_iteration (context=0x79e40c005040, may_block=1) at ../../../glib/gmain.c:4278
#73 0x000079e419a62700 in QEventDispatcherGlib::processEvents (this=0x5f1507564580, flags=...) at ./src/corelib/kernel/qeventdispatcher_glib.cpp:394
#74 0x000079e419ca3feb in QEventLoop::exec (this=this@entry=0x7ffe8da2d270, flags=..., flags@entry=...) at ./src/corelib/global/qflags.h:34
#75 0x000079e419ca5c2c in QCoreApplication::exec () at ./src/corelib/global/qflags.h:74
#76 0x000079e41a0e44a0 in QGuiApplication::exec () at ./src/gui/kernel/qguiapplication.cpp:1926
#77 0x000079e41bc08259 in QApplication::exec () at ./src/widgets/kernel/qapplication.cpp:2555
#78 0x00005f1505948a2e in main (argc=<optimized out>, argv=<optimized out>) at ./app/main.cpp:175
Comment 3 Akseli Lahtinen 2024-09-17 14:18:20 UTC
I can reproduce this issue only on KDE Neon. Fedora KDE was fine.

I am really not sure if this is what's happening but: It seems that Neon creates a file that has read-only rights in it and for some reason it then tries to write into that same file.
Comment 4 Nicolas Fella 2024-09-17 14:25:02 UTC
You're only seeing it on Neon because that builds with asserts enabled and Fedora does not.

It has nothing to do with files being read-only, it's a weird KConfig thing
Comment 5 Bug Janitor Service 2024-09-17 14:29:30 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/2530
Comment 6 Akseli Lahtinen 2024-09-17 14:57:32 UTC
Ah that explains! I thought Fedora just logged the asserts, but seems not (or Im missing some magic env var).
Comment 7 Nicolas Fella 2024-09-18 14:02:52 UTC
Git commit 3ae534db226979758b51d99cd57862538b5e17ac by Nicolas Fella.
Committed on 18/09/2024 at 14:02.
Pushed by nicolasfella into branch 'master'.

[kcms/keys] Don't write into a read-only KConfigGroup

KConfigGroups created from const KConfig objects are read-only, but we want to write here

SENTRY: SYSTEMSETTINGS-H0

M  +1    -1    kcms/keys/basemodel.h
M  +1    -1    kcms/keys/globalaccelmodel.cpp
M  +1    -1    kcms/keys/globalaccelmodel.h
M  +1    -1    kcms/keys/standardshortcutsmodel.cpp
M  +1    -1    kcms/keys/standardshortcutsmodel.h

https://invent.kde.org/plasma/plasma-desktop/-/commit/3ae534db226979758b51d99cd57862538b5e17ac
Comment 8 Nicolas Fella 2024-09-18 14:03:28 UTC
Git commit 1c00bd80edc1bda985ea6d15ab1bb0e9460a4b26 by Nicolas Fella.
Committed on 18/09/2024 at 14:03.
Pushed by nicolasfella into branch 'Plasma/6.2'.

[kcms/keys] Don't write into a read-only KConfigGroup

KConfigGroups created from const KConfig objects are read-only, but we want to write here

SENTRY: SYSTEMSETTINGS-H0
(cherry picked from commit 3ae534db226979758b51d99cd57862538b5e17ac)

M  +1    -1    kcms/keys/basemodel.h
M  +1    -1    kcms/keys/globalaccelmodel.cpp
M  +1    -1    kcms/keys/globalaccelmodel.h
M  +1    -1    kcms/keys/standardshortcutsmodel.cpp
M  +1    -1    kcms/keys/standardshortcutsmodel.h

https://invent.kde.org/plasma/plasma-desktop/-/commit/1c00bd80edc1bda985ea6d15ab1bb0e9460a4b26