Bug 506369 - Crash in KWin::TabBox::areModKeysDepressed
Summary: Crash in KWin::TabBox::areModKeysDepressed
Status: RESOLVED FIXED
Alias: None
Product: kwin
Classification: Plasma
Component: generic-crash (other bugs)
Version First Reported In: 6.4.1
Platform: NixOS Linux
: NOR crash
Target Milestone: ---
Assignee: KWin default assignee
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-06-29 23:07 UTC by Eduard
Modified: 2025-07-02 15:47 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In: 6.4.2
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Eduard 2025-06-29 23:07:24 UTC
SUMMARY
kwin_wayland crashed

STEPS TO REPRODUCE
1. Unknown, nothing obvious/noticeable.

OBSERVED RESULT
crash

EXPECTED RESULT
no crash

SOFTWARE/OS VERSIONS
Operating System: NixOS 25.11
KDE Plasma Version: 6.4.1
KDE Frameworks Version: 6.15.0
Qt Version: 6.9.0
Kernel Version: 6.15.3 (64-bit)
Graphics Platform: Wayland
Processors: 24 × AMD Ryzen 9 5900X 12-Core Processor
Memory: 32 GiB of RAM (31.3 GiB usable)
Graphics Processor: AMD Radeon RX 7900 XTX


ADDITIONAL INFORMATION
```
(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  0x00007f0a2d89cfa3 in __pthread_kill_internal (threadid=<optimized out>, signo=11) at pthread_kill.c:78
#2  0x00007f0a2d84190e in __GI_raise (sig=11) at ../sysdeps/posix/raise.c:26
#3  0x00007f0a322636f3 in KCrash::defaultCrashHandler (sig=11) at /build/kcrash-6.15.0/src/kcrash.cpp:605
#4  <signal handler called>
#5  0x00007f0a2eec2769 in QKeySequence::operator[] (this=this@entry=0x254d9af0, index=4294967295) at /build/qtbase-everywhere-src-6.9.0/src/gui/kernel/qkeysequence.cpp:1368
#6  0x00007f0a31eab8d3 in KWin::TabBox::areModKeysDepressed (shortcuts=...) at /build/kwin-6.4.1/src/tabbox/tabbox.cpp:664
#7  KWin::TabBox::TabBox::navigatingThroughWindows (this=0x239a4220, forward=<optimized out>, shortcut=..., mode=KWin::TabBoxWindowsMode) at /build/kwin-6.4.1/src/tabbox/tabbox.cpp:694
#8  KWin::TabBox::TabBox::navigatingThroughWindows (this=0x239a4220, forward=<optimized out>, shortcut=..., mode=KWin::TabBoxWindowsMode) at /build/kwin-6.4.1/src/tabbox/tabbox.cpp:684
#9  0x00007f0a2e2207ee in QtPrivate::QSlotObjectBase::call (this=0x24b23de0, r=<optimized out>, a=0x7ffc5b20bbb0) at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qobjectdefs_impl.h:461
#10 doActivate<false> (sender=0x24b99cb0, signal_index=7, argv=0x7ffc5b20bbb0) at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qobject.cpp:4138
#11 0x00007f0a2e2167a7 in QMetaObject::activate (sender=sender@entry=0x24b99cb0, m=m@entry=0x7f0a2f1d5f40 <QAction::staticMetaObject>, local_signal_index=local_signal_index@entry=4,
argv=argv@entry=0x7ffc5b20bbb0) at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qobject.cpp:4198
#12 0x00007f0a2eeb5f84 in QMetaObject::activate<void, bool> (sender=0x24b99cb0, mo=0x7f0a2f1d5f40 <QAction::staticMetaObject>, local_signal_index=4, ret=0x0)
at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qobjectdefs.h:306
#13 QAction::triggered (this=this@entry=0x24b99cb0, _t1=<optimized out>) at /build/qtbase-everywhere-src-6.9.0/build/src/gui/Gui_autogen/include/moc_qaction.cpp:372
#14 0x00007f0a2eeb930f in QAction::activate (this=0x24b99cb0, event=<optimized out>) at /build/qtbase-everywhere-src-6.9.0/src/gui/kernel/qaction.cpp:1104
#15 0x00007f0a2e2207ee in QtPrivate::QSlotObjectBase::call (this=0x24ac7b40, r=<optimized out>, a=0x7ffc5b20bd60) at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qobjectdefs_impl.h:461
#16 doActivate<false> (sender=0x24ac7640, signal_index=3, argv=0x7ffc5b20bd60) at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qobject.cpp:4138
#17 0x00007f0a2e2167a7 in QMetaObject::activate (sender=<optimized out>, m=m@entry=0x7f0a2fffe3e0 <OrgKdeKglobalaccelComponentInterface::staticMetaObject>, local_signal_index=local_signal_index@entry=0,
argv=argv@entry=0x7ffc5b20bd60) at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qobject.cpp:4198
#18 0x00007f0a2fff4465 in QMetaObject::activate<void, QString, QString, long long> (sender=<optimized out>, mo=0x7f0a2fffe3e0 <OrgKdeKglobalaccelComponentInterface::staticMetaObject>, local_signal_index=0,
ret=0x0) at /nix/store/l9kvcx3wna1bla7xpy1629hawjqmna4y-qtbase-6.9.0/include/QtCore/qobjectdefs.h:306
#19 OrgKdeKglobalaccelComponentInterface::globalShortcutPressed (this=<optimized out>, _t1=..., _t2=..., _t3=<optimized out>) at /build/kglobalaccel-6.15.0/build/src/moc_kglobalaccel_component_interface.cpp:199
#20 OrgKdeKglobalaccelComponentInterface::qt_static_metacall (_o=0x24ac7640, _c=<optimized out>, _id=<optimized out>, _a=0x7ffc5b20bf58)
at /build/kglobalaccel-6.15.0/build/src/moc_kglobalaccel_component_interface.cpp:122
#21 0x00007f0a2fff46ff in OrgKdeKglobalaccelComponentInterface::qt_metacall (this=0x24ac7640, _c=<optimized out>, _id=0, _a=0x7ffc5b20bf58)
at /build/kglobalaccel-6.15.0/build/src/moc_kglobalaccel_component_interface.cpp:179
#22 0x00007f0a2f463d66 in QDBusConnectionPrivate::deliverCall (this=0x7f0a20001690, object=0x24ac7640, msg=..., metaTypes=..., slotIdx=5) at /build/qtbase-everywhere-src-6.9.0/src/dbus/qdbusintegrator.cpp:1007
#23 0x00007f0a2e211aea in QObject::event (this=0x24ac7640, e=0x7f0a20025d60) at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qobject.cpp:1431
#24 0x00007f0a2f7a19fd in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x24ac7640, e=0x7f0a20025d60) at /build/qtbase-everywhere-src-6.9.0/src/widgets/kernel/qapplication.cpp:3301
#25 0x00007f0a2e1b4408 in QCoreApplication::notifyInternal2 (receiver=0x24ac7640, event=0x7f0a20025d60) at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qcoreapplication.cpp:1106
#26 0x00007f0a2e1b466d in QCoreApplication::sendEvent (receiver=<optimized out>, event=<optimized out>) at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qcoreapplication.cpp:1546
#27 0x00007f0a2e1b8258 in QCoreApplicationPrivate::sendPostedEvents (receiver=receiver@entry=0x0, event_type=event_type@entry=0, data=data@entry=0x231b0830)
at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qcoreapplication.cpp:1879
#28 0x00007f0a2e390e52 in QEventDispatcherUNIX::processEvents (this=0x231d7b20, flags=...) at /build/qtbase-everywhere-src-6.9.0/src/corelib/kernel/qeventdispatcher_unix.cpp:418
#29 0x00007f0a2eff2bb2 in QUnixEventDispatcherQPA::processEvents (this=<optimized out>, flags=...) at /build/qtbase-everywhere-src-6.9.0/src/gui/platform/unix/qunixeventdispatcher.cpp:27
#30 0x00007f0a2e1c2d2b in QEventLoop::exec (this=this@entry=0x7ffc5b20c4a0, flags=..., flags@entry=...) at /build/qtbase-everywhere-src-6.9.0/src/corelib/global/qflags.h:77
#31 0x00007f0a2e1bdf21 in QCoreApplication::exec () at /build/qtbase-everywhere-src-6.9.0/src/corelib/global/qflags.h:77
#32 0x00007f0a2e9f056d in QGuiApplication::exec () at /build/qtbase-everywhere-src-6.9.0/src/gui/kernel/qguiapplication.cpp:1993
#33 0x00007f0a2f7a1969 in QApplication::exec () at /build/qtbase-everywhere-src-6.9.0/src/widgets/kernel/qapplication.cpp:2568
#34 0x0000000000448d9e in main (argc=<optimized out>, argv=<optimized out>) at /build/kwin-6.4.1/src/main_wayland.cpp:638
(gdb) frame 6
Downloading source file /build/kwin-6.4.1/src/tabbox/tabbox.cpp
#6  0x00007f0a31eab8d3 in KWin::TabBox::areModKeysDepressed (shortcuts=...) at /build/kwin-6.4.1/src/tabbox/tabbox.cpp:664
664             const Qt::KeyboardModifiers mod = seq[seq.count() - 1].keyboardModifiers();
(gdb) l
659         if (shortcuts.isEmpty()) {
660             return false;
661         }
662
663         for (const QKeySequence &seq : shortcuts) {
664             const Qt::KeyboardModifiers mod = seq[seq.count() - 1].keyboardModifiers();
665             const Qt::KeyboardModifiers mods = input()->modifiersRelevantForGlobalShortcuts();
666
667             if ((mod & Qt::ShiftModifier) && mods.testFlag(Qt::ShiftModifier)) {
668                 return true;
(gdb) p seq.count
$7 = {int (const QKeySequence * const)} 0x7f0a2eec1c90 <QKeySequence::count() const>
(gdb) info locals
mod = <optimized out>
mods = <optimized out>
seq = @0x254d9af0: {static staticMetaObject = {d = {superdata = {direct = 0x0},
stringdata = 0x7f0a2f0d70b8 <QKeySequence::qt_staticMetaObjectStaticContent<(anonymous namespace)::qt_meta_tag_ZN12QKeySequenceE_t>+728>,
data = 0x7f0a2f0d6de0 <QKeySequence::qt_staticMetaObjectStaticContent<(anonymous namespace)::qt_meta_tag_ZN12QKeySequenceE_t>>, static_metacall = 0x0, relatedMetaObjects = 0x0,
metaTypes = 0x7f0a2f1c6fc0 <QKeySequence::qt_staticMetaObjectRelocatingContent<(anonymous namespace)::qt_meta_tag_ZN12QKeySequenceE_t>>, extradata = 0x0}}, d = 0x256cf870}
__for_range = <optimized out>
__for_begin = <optimized out>
__for_end = <optimized out>
(gdb) frame 5
#5  0x00007f0a2eec2769 in QKeySequence::operator[] (this=this@entry=0x254d9af0, index=4294967295) at /build/qtbase-everywhere-src-6.9.0/src/gui/kernel/qkeysequence.cpp:1368
1368        return QKeyCombination::fromCombined(d->key[index]);
(gdb) l
1363        sequence. This can only be used to read an element.
1364     */
1365    QKeyCombination QKeySequence::operator[](uint index) const
1366    {
1367        Q_ASSERT_X(index < QKeySequencePrivate::MaxKeyCount, "QKeySequence::operator[]", "index out of range");
1368        return QKeyCombination::fromCombined(d->key[index]);
1369    }
1370
1371
1372    /*!
(gdb) p d
$8 = (QKeySequencePrivate *) 0x256cf870
(gdb) p d->key
$10 = {0, 0, 0, 0}
(gdb) p index
$11 = 4294967295
Comment 1 Bug Janitor Service 2025-07-01 09:22:46 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/kwin/-/merge_requests/7851
Comment 2 Vlad Zahorodnii 2025-07-01 10:54:28 UTC
Git commit d00c192c568a14aead0a5d536685d6e34cc969be by Vlad Zahorodnii, on behalf of David Edmundson.
Committed on 01/07/2025 at 10:54.
Pushed by vladz into branch 'master'.

tabbox: Guard for empty key sequences

M  +3    -0    src/tabbox/tabbox.cpp

https://invent.kde.org/plasma/kwin/-/commit/d00c192c568a14aead0a5d536685d6e34cc969be
Comment 3 Vlad Zahorodnii 2025-07-01 11:33:00 UTC
Git commit 0d46ef4936f6d1f9befa2d96b5e0f604b19a15e0 by Vlad Zahorodnii.
Committed on 01/07/2025 at 10:56.
Pushed by vladz into branch 'Plasma/6.4'.

tabbox: Guard for empty key sequences


(cherry picked from commit d00c192c568a14aead0a5d536685d6e34cc969be)

3c58f3c7 tabbox: Guard for empty key sequences
2be6e2e3 Apply 1 suggestion(s) to 1 file(s)

Co-authored-by: David Edmundson <kde@davidedmundson.co.uk>

M  +3    -0    src/tabbox/tabbox.cpp

https://invent.kde.org/plasma/kwin/-/commit/0d46ef4936f6d1f9befa2d96b5e0f604b19a15e0