Bug 462711

Summary: Discover crashes with --feedback
Product: [Applications] Discover Reporter: Kai Uwe Broulik <kde>
Component: discoverAssignee: Plasma Bugs List <plasma-bugs-null>
Status: RESOLVED FIXED    
Severity: crash CC: aleixpol, nate
Priority: NOR    
Version First Reported In: master   
Target Milestone: ---   
Platform: Neon   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description Kai Uwe Broulik 2022-12-06 14:56:22 UTC
SUMMARY
Running plasma-discover --feedback which is executed by System Settings has Discover crash on teardown.

STEPS TO REPRODUCE
1. Run plasma-discover --feedback

OBSERVED RESULT
It crashes

EXPECTED RESULT
It does not crash

SOFTWARE/OS VERSIONS
Linux/KDE Plasma: git master as of 2022-12-04

ADDITIONAL INFORMATION
It prints "Must construct a QGuiApplication first." which is why inputMethod returns null in the backtrace.

#6  QInputMethodPrivate::platformInputContext() const (this=Python Exception <class 'gdb.MemoryError'>: Cannot access memory at address 0x8
#7  QInputMethod::inputDirection() const (this=0x0) at kernel/qinputmethod.cpp:298
#8  0x00007f4b6e8382f5 in QQuickTextPrivate::determineHorizontalAlignment() (this=0x55de1be87950) at items/qquicktext.cpp:1990
#9  QQuickTextPrivate::determineHorizontalAlignment() (this=0x55de1be87950) at items/qquicktext.cpp:1986
#10 0x00007f4b6e83ef8f in QQuickText::setText(QString const&) (this=0x55de1be87880, n=<optimized out>) at items/qquicktext.cpp:1737
#11 0x00007f4b663660f3 in QQuickMnemonicLabel::updateMnemonic() () at /lib/x86_64-linux-gnu/libQt5QuickControls2.so.5
#12 0x00007f4b6d9101fb in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const (flags=..., value=0x7ffeae8ec768, target=<optimized out>, this=0x7f4b1c1deb78) at ../../include/QtQml/5.15.7/QtQml/private/../../../../../src/qml/qml/qqmlpropertydata_p.h:391
#13 GenericBinding<10>::doStore<QString>(QString, QQmlPropertyData const*, QFlags<QQmlPropertyData::WriteFlag>) const (flags=..., pd=0x7f4b1c1deb78, value=..., this=0x55de1be88380) at qml/qqmlbinding.cpp:342
#14 GenericBinding<10>::write(QV4::Value const&, bool, QFlags<QQmlPropertyData::WriteFlag>) (this=0x55de1be88380, result=..., isUndefined=<optimized out>, flags=...) at qml/qqmlbinding.cpp:323
#15 0x00007f4b6d910a97 in QQmlNonbindingBinding::doUpdate(QQmlJavaScriptExpression::DeleteWatcher const&, QFlags<QQmlPropertyData::WriteFlag>, QV4::Scope&) (this=0x55de1be88380, watcher=..., flags=..., scope=...) at qml/qqmlbinding.cpp:258
#16 0x00007f4b6d90e5f4 in QQmlBinding::update(QFlags<QQmlPropertyData::WriteFlag>) (this=0x55de1be88380, flags=...) at qml/qqmlbinding.cpp:194
#17 0x00007f4b6d8eb0f5 in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) (endpoint=<optimized out>, a=0x0) at qml/qqmlnotifier.cpp:104
#18 0x00007f4b6ccacc7b in doActivate<false>(QObject*, int, void**) (sender=0x55de1be8b7b0, signal_index=7, argv=0x0) at kernel/qobject.cpp:3811
#19 0x00007f4b21801198 in  () at /usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/libKirigamiPlugin.so
#20 0x00007f4b21801b3a in  () at /usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/libKirigamiPlugin.so
#21 0x00007f4b6d9101fb in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const (flags=..., value=0x7ffeae8ee398, target=<optimized out>, this=0x7f4b1c170f58) at ../../include/QtQml/5.15.7/QtQml/private/../../../../../src/qml/qml/qqmlpropertydata_p.h:391
#22 GenericBinding<10>::doStore<QString>(QString, QQmlPropertyData const*, QFlags<QQmlPropertyData::WriteFlag>) const (flags=..., pd=0x7f4b1c170f58, value=..., this=0x55de1be8b9b0) at qml/qqmlbinding.cpp:342
#23 GenericBinding<10>::write(QV4::Value const&, bool, QFlags<QQmlPropertyData::WriteFlag>) (this=0x55de1be8b9b0, result=..., isUndefined=<optimized out>, flags=...) at qml/qqmlbinding.cpp:323
#24 0x00007f4b6d910a97 in QQmlNonbindingBinding::doUpdate(QQmlJavaScriptExpression::DeleteWatcher const&, QFlags<QQmlPropertyData::WriteFlag>, QV4::Scope&) (this=0x55de1be8b9b0, watcher=..., flags=..., scope=...) at qml/qqmlbinding.cpp:258
#25 0x00007f4b6d90e5f4 in QQmlBinding::update(QFlags<QQmlPropertyData::WriteFlag>) (this=0x55de1be8b9b0, flags=...) at qml/qqmlbinding.cpp:194
#26 0x00007f4b6d8eb0f5 in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) (endpoint=<optimized out>, a=0x7ffeae8efec0) at qml/qqmlnotifier.cpp:104
#27 0x00007f4b6ccacc7b in doActivate<false>(QObject*, int, void**) (sender=0x55de1b623d70, signal_index=3, argv=0x7ffeae8efec0) at kernel/qobject.cpp:3811
#28 0x00007f4b65d61da6 in QQuickAction::textChanged(QString const&) () at /lib/x86_64-linux-gnu/libQt5QuickTemplates2.so.5
#29 0x00007f4b6d9101fb in QQmlPropertyData::writeProperty(QObject*, void*, QFlags<QQmlPropertyData::WriteFlag>) const (flags=..., value=0x7ffeae8eff08, target=<optimized out>, this=0x7f4b1c10bdf8) at ../../include/QtQml/5.15.7/QtQml/private/../../../../../src/qml/qml/qqmlpropertydata_p.h:391
#30 GenericBinding<10>::doStore<QString>(QString, QQmlPropertyData const*, QFlags<QQmlPropertyData::WriteFlag>) const (flags=..., pd=0x7f4b1c10bdf8, value=..., this=0x55de1b4ee630) at qml/qqmlbinding.cpp:342
#31 GenericBinding<10>::write(QV4::Value const&, bool, QFlags<QQmlPropertyData::WriteFlag>) (this=0x55de1b4ee630, result=..., isUndefined=<optimized out>, flags=...) at qml/qqmlbinding.cpp:323
#32 0x00007f4b6d910a97 in QQmlNonbindingBinding::doUpdate(QQmlJavaScriptExpression::DeleteWatcher const&, QFlags<QQmlPropertyData::WriteFlag>, QV4::Scope&) (this=0x55de1b4ee630, watcher=..., flags=..., scope=...) at qml/qqmlbinding.cpp:258
#33 0x00007f4b6d90e5f4 in QQmlBinding::update(QFlags<QQmlPropertyData::WriteFlag>) (this=0x55de1b4ee630, flags=...) at qml/qqmlbinding.cpp:194
#34 0x00007f4b6d8eb0f5 in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) (endpoint=<optimized out>, a=0x0) at qml/qqmlnotifier.cpp:104
#35 0x00007f4b6ccacc7b in doActivate<false>(QObject*, int, void**) (sender=0x55de1b623d70, signal_index=24, argv=0x0) at kernel/qobject.cpp:3811
#36 0x00007f4b6d89b75c in QQmlData::destroyed(QObject*) (this=0x55de1b6eb2f0, object=0x55de1b1ef000) at qml/qqmlengine.cpp:1961
#37 0x00007f4b6ccaae4b in QObject::~QObject() (this=<optimized out>, __in_chrg=<optimized out>) at kernel/qobject.cpp:1019
#38 0x00007f4b6eb5a71d in Category::~Category() () at /usr/lib/x86_64-linux-gnu/plasma-discover/libDiscoverCommon.so
#39 0x00007f4b3168f4e6 in KNSBackend::~KNSBackend() () at /usr/lib/x86_64-linux-gnu/qt5/plugins/discover/kns-backend.so
#40 0x00007f4b3168f6ed in KNSBackend::~KNSBackend() () at /usr/lib/x86_64-linux-gnu/qt5/plugins/discover/kns-backend.so
#41 0x00007f4b6cca013e in QObjectPrivate::deleteChildren() (this=0x55de1ae45330) at kernel/qobject.cpp:2137
#42 0x00007f4b6ccab1c6 in QObject::~QObject() (this=<optimized out>, __in_chrg=<optimized out>) at kernel/qobject.cpp:1115
#43 0x000055de1955bc78 in  ()
#44 0x00007f4b6c590d90 in __libc_start_call_main (main=main@entry=0x55de1955b340, argc=argc@entry=2, argv=argv@entry=0x7ffeae8f1ef8) at ../sysdeps/nptl/libc_start_call_main.h:58
#45 0x00007f4b6c590e40 in __libc_start_main_impl (main=0x55de1955b340, argc=2, argv=0x7ffeae8f1ef8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffeae8f1ee8) at ../csu/libc-start.c:392
#46 0x000055de1955c6a5 in  ()
Comment 1 Kai Uwe Broulik 2022-12-06 14:57:40 UTC
Only if Qt is compiled with input method support, I presume. Otherwise QQuickTextPrivate::determineHorizontalAlignment() does not call into inputMethod(). Still looks fishy that it does any QML stuff this way.
Comment 2 Aleix Pol 2022-12-07 14:14:00 UTC
Git commit fdcc8bdd2fdc89a06b35d4736a66a1712f386cc8 by Aleix Pol.
Committed on 07/12/2022 at 14:13.
Pushed by apol into branch 'master'.

Do not load backends when running with --feedback

M  +8    -1    libdiscover/DiscoverBackendsFactory.cpp

https://invent.kde.org/plasma/discover/commit/fdcc8bdd2fdc89a06b35d4736a66a1712f386cc8