Bug 489702 - Plasmashell crashes when clearing clipboard
Summary: Plasmashell crashes when clearing clipboard
Status: RESOLVED FIXED
Alias: None
Product: plasmashell
Classification: Plasma
Component: Clipboard widget & pop-up (other bugs)
Version First Reported In: master
Platform: Other Linux
: NOR crash
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-07-03 20:28 UTC by Akseli Lahtinen
Modified: 2024-07-04 13:44 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Akseli Lahtinen 2024-07-03 20:28:24 UTC
SUMMARY

When clicking on the clean clipboard history button, plasmashell crashes.
I am not sure why but I think it has something to do with having clipboard history, then rebuilding plasmashell (or just restarting PC) and then trying to clear it.

STEPS TO REPRODUCE
1. Add a lot of text and images (like with spectacle) to your clipboard
2. Restart PC and/or rebuild plasma dev session
3. Log in and try to clean clipboard

OBSERVED RESULT
Plasmashell goes crash

EXPECTED RESULT
No crash!

SOFTWARE/OS VERSIONS
Operating System: Fedora Linux 40
KDE Plasma Version: 6.1.80
KDE Frameworks Version: 6.4.0
Qt Version: 6.7.1
Kernel Version: 6.9.7-200.fc40.x86_64 (64-bit)
Graphics Platform: Wayland
Processors: 12 × AMD Ryzen 5 3600 6-Core Processor
Memory: 15.5 GiB of RAM
Graphics Processor: AMD Radeon RX 6600

ADDITIONAL INFORMATION
Here's a backtrace:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=11, no_tid=no_tid@entry=0)
at pthread_kill.c:44
44            return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO (ret) : 0;
[Current thread is 1 (Thread 0x7fc7703adb80 (LWP 6748))]
Missing separate debuginfos, use: dnf debuginfo-install ffmpeg-libs-6.1.1-11.fc40.x86_64 x264-libs-0.164-13.20231001git31e19f92.fc40.x86_64 x265-libs-3.6-2.fc40.x86_64
(gdb) bt
#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=11, no_tid=no_tid@entry=0)
at pthread_kill.c:44
#1  0x00007fc7756ab1b3 in __pthread_kill_internal (threadid=<optimized out>, signo=11) at pthread_kill.c:78
#2  0x00007fc77565365e in __GI_raise (sig=11) at ../sysdeps/posix/raise.c:26
#3  0x00007fc77940e9eb in KCrash::defaultCrashHandler (sig=11)
at /home/akseli/Repositories/kde/src/kcrash/src/kcrash.cpp:597
#4  0x00007fc775653710 in <signal handler called> () at /lib64/libc.so.6
#5  0x000000000f3230e0 in ??? ()
#6  0x00007fc7118861fe in operator<< (lhs=..., rhs=0x10fd26d0)
at /home/akseli/Repositories/kde/src/plasma-workspace/klipper/historyitem.h:116
#7  HistoryModel::saveHistory (this=0x10fd4560, empty=empty@entry=false)
at /home/akseli/Repositories/kde/src/plasma-workspace/klipper/historymodel.cpp:296
#8  0x00007fc71186beb1 in Klipper::slotAskClearHistory (this=this@entry=0x10fba9e0)
at /home/akseli/Repositories/kde/src/plasma-workspace/klipper/klipper.cpp:687
#9  0x00007fc711866329 in ClipboardJob::start (this=0x1548eb70)
at /home/akseli/Repositories/kde/src/plasma-workspace/klipper/clipboardjob.cpp:36
#10 0x00007fc775debdeb in QObject::event (this=0x1548eb70, e=0x156e96c0)
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/corelib/kernel/qobject.cpp:1452
#11 0x00007fc77878b168 in QApplicationPrivate::notify_helper
(this=<optimized out>, receiver=0x1548eb70, e=0x156e96c0)
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/widgets/kernel/qapplication.cpp:3287
#12 0x00007fc775d95b18 in QCoreApplication::notifyInternal2 (receiver=0x1548eb70, event=0x156e96c0)
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/corelib/kernel/qcoreapplication.cpp:1134
#13 0x00007fc775d95d7d in QCoreApplication::sendEvent (receiver=<optimized out>, event=<optimized out>)
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/corelib/kernel/qcoreapplication.cpp:1575
#14 0x00007fc775d998c1 in QCoreApplicationPrivate::sendPostedEvents
(receiver=0x0, event_type=0, data=0xf3230e0)
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/corelib/kernel/qcoreapplication.cpp:1932
#15 0x00007fc775d99b6d in QCoreApplication::sendPostedEvents
(receiver=<optimized out>, event_type=<optimized out>)
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/corelib/kernel/qcoreapplication.cpp:1789
#16 0x00007fc77607d39f in postEventSourceDispatch (s=0xf411c90)
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:244
#17 0x00007fc77526de8c in g_main_dispatch (context=0x7fc75c000f00) at ../glib/gmain.c:3344
--Type <RET> for more, q to quit, c to continue without paging--c
#18 g_main_context_dispatch_unlocked (context=0x7fc75c000f00) at ../glib/gmain.c:4152
#19 0x00007fc7752cfc98 in g_main_context_iterate_unlocked.isra.0
(context=context@entry=0x7fc75c000f00, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217
#20 0x00007fc77526f383 in g_main_context_iteration (context=0x7fc75c000f00, may_block=1)
at ../glib/gmain.c:4282
#21 0x00007fc77607cb53 in QEventDispatcherGlib::processEvents (this=0xf328e30, flags=...)
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:394
#22 0x00007fc775da2713 in QEventLoop::exec (this=this@entry=0x7fff50d534f0, flags=..., flags@entry=...)
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/corelib/global/qflags.h:34
#23 0x00007fc775d9e69c in QCoreApplication::exec ()
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/corelib/global/qflags.h:74
#24 0x00007fc7767d53dd in QGuiApplication::exec ()
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/gui/kernel/qguiapplication.cpp:1926
#25 0x00007fc77878b0d9 in QApplication::exec ()
at /usr/src/debug/qt6-qtbase-6.7.1-2.fc40.x86_64/src/widgets/kernel/qapplication.cpp:2555
#26 0x0000000000427a86 in main (argc=<optimized out>, argv=<optimized out>)
at /home/akseli/Repositories/kde/src/plasma-workspace/shell/main.cpp:188
Comment 1 Akseli Lahtinen 2024-07-03 20:31:05 UTC
If I clean the items one at a time, i get no crashes. But if I even have one item (even after cleaning the old items) and try to clean the clipboard, i get a crash
Comment 2 Akseli Lahtinen 2024-07-03 20:32:00 UTC
And after crashing and restarting plasmashell, the old items are in the clipboard, even I just cleaned them out individually. So the clipboard history is broken somehow.
Comment 3 Bug Janitor Service 2024-07-04 07:25:31 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/4495
Comment 4 Akseli Lahtinen 2024-07-04 08:20:13 UTC
Git commit 65e966434c5ae5586f18e4f94f775ef72190f72c by Akseli Lahtinen.
Committed on 04/07/2024 at 08:20.
Pushed by akselmo into branch 'master'.

klipper.cpp: Tell saveHistory its saving empty history

Need to make sure we clear the model and do not use empty list of items when
saving history. Also, without this true parameter in klipper.cpp, saveHistory will crash plasmashell.

M  +1    -1    klipper/historymodel.cpp
M  +1    -1    klipper/klipper.cpp

https://invent.kde.org/plasma/plasma-workspace/-/commit/65e966434c5ae5586f18e4f94f775ef72190f72c
Comment 5 Bug Janitor Service 2024-07-04 13:44:29 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/4498