Bug 495435

Summary: Krusader crashes if "Properties" dialog is invoked for a directory via context menu fresh after start
Product: [Applications] krusader Reporter: Alex Chudnovsky <chalex2005>
Component: generalAssignee: Krusader Bugs Distribution List <krusader-bugs-null>
Status: REPORTED ---    
Severity: crash CC: alex.bikadorov, krusader-bugs-null
Priority: NOR    
Version: Git   
Target Milestone: ---   
Platform: Arch Linux   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:
Attachments: Stack trace
Stack trace with debug symbols

Description Alex Chudnovsky 2024-10-27 15:39:36 UTC
SUMMARY
Krusader crashes if "Properties" dialog is invoked for a directory via context menu fresh after start

STEPS TO REPRODUCE
1. Start the tool
2. On any directory, invoke the context menu and choose "Properties"


OBSERVED RESULT
Krusader crashes (SIGSEGV according to the terminal)


EXPECTED RESULT
The Properties dialog should be shown. 

SOFTWARE/OS VERSIONS
Windows: 
macOS: 
(available in the Info Center app, or by running `kinfo` in a terminal window)
Linux/KDE Plasma: Arch Linux
KDE Plasma Version:  6.2.2
KDE Frameworks Version: 6.7.0
Qt Version: 6.8.0

ADDITIONAL INFORMATION
NOTE: if Alt-Enter is used instead, the GUI seemingly disappears and then reappears, with the Properties dialog open. Any subsequent invocation of Properties, via context menu or shortcut, appears OK.
Comment 1 Alex Bikadorov 2024-10-28 14:21:49 UTC
Does the "Properties" dialog work in Dolphin?

Can you provide the stack trace? (It is usually logged by systemd-coredump and can be viewed with "journalctl -n 100".)
Comment 2 Alex Chudnovsky 2024-10-28 19:05:33 UTC
Created attachment 175312 [details]
Stack trace
Comment 3 Alex Chudnovsky 2024-10-28 19:06:53 UTC
(In reply to Alex Bikadorov from comment #1)
> Does the "Properties" dialog work in Dolphin?

Yes

> 
> Can you provide the stack trace? (It is usually logged by systemd-coredump
> and can be viewed with "journalctl -n 100".)
Attached.
Comment 4 Alex Bikadorov 2024-10-30 15:11:02 UTC
Thanks. Relevant stack trace:
                Stack trace of thread 3089961:
                #0  0x00007766830f15d8 n/a (libQt6Widgets.so.6 + 0xf15d8)
                #1  0x000077668316a7cc n/a (libQt6Widgets.so.6 + 0x16a7cc)
                #2  0x00007766830fe31a _ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent (libQt6Widgets.so.6 + 0xfe31a)
                #3  0x00007766821585a8 _ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent (libQt6Core.so.6 + 0x1585a8)
                #4  0x0000776682785d4b _ZN22QGuiApplicationPrivate17processMouseEventEPN29QWindowSystemInterfacePrivate10MouseEventE (libQt6Gui.so.6 + 0x185d4b)
                #5  0x0000776682801284 _ZN22QWindowSystemInterface22sendWindowSystemEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE (libQt6Gui.so.6 + 0x201284)
                #6  0x0000776682c4da14 n/a (libQt6Gui.so.6 + 0x64da14)
                #7  0x000077667fb88559 n/a (libglib-2.0.so.0 + 0x5d559)
                #8  0x000077667fbeb157 n/a (libglib-2.0.so.0 + 0xc0157)
                #9  0x000077667fb87a55 g_main_context_iteration (libglib-2.0.so.0 + 0x5ca55)
                #10 0x00007766823bf71d _ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE (libQt6Core.so.6 + 0x3bf71d)
                #11 0x0000776682164566 _ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE (libQt6Core.so.6 + 0x164566)
                #12 0x0000776682159a2f _ZN16QCoreApplication4execEv (libQt6Core.so.6 + 0x159a2f)
                #13 0x000061f1e0d5420f n/a (krusader + 0x9b20f)
                #14 0x0000776681a34e08 n/a (libc.so.6 + 0x25e08)
                #15 0x0000776681a34ecc __libc_start_main (libc.so.6 + 0x25ecc)
                #16 0x000061f1e0d56465 n/a (krusader + 0x9d465)

It seems to be deep in Qt6 base libraries. Also, I don't get why glib2 is used in between.

What is your exact Krusader version (git hash)?
What is your desktop environment? Plasma?
You are sure that your Arch packages, specially qt6-base and glib2 are up to date?

>ADDITIONAL INFORMATION
>NOTE: if Alt-Enter is used instead, the GUI seemingly disappears and then reappears, with the Properties dialog open. Any subsequent invocation of Properties, via context menu or shortcut, appears OK.

That indicates maybe a bug with signal/slot code. Also fits to the stack trace doing event processing.

I have the exact same software versions on Arch and still cannot reproduce it :/  A stack trace with debug symbols would be good.
Comment 5 Alex Chudnovsky 2024-10-30 17:35:13 UTC
> What is your exact Krusader version (git hash)?
krusader-git 2.9.0.dev.r7107.gecfea02c9-1

> What is your desktop environment? Plasma?

Correct

> You are sure that your Arch packages, specially qt6-base and glib2 are up to
> date?

qt6-base 6.8.0-1
glib2 2.82.2-1

> A stack trace with debug symbols would be good.
Please advise about a way of getting the debug symbols in question.
Comment 6 Alex Chudnovsky 2024-10-30 21:14:26 UTC
Created attachment 175379 [details]
Stack trace with debug symbols
Comment 7 Alex Chudnovsky 2024-10-30 21:16:17 UTC
Thread 1 "krusader" received signal SIGSEGV, Segmentation fault.
Downloading 30.04 K source file /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qwidget.h
QWidget::rect (this=0x555555930ba0) at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qwidget.h:891                                            
891     { return QRect(0,0,data->crect.width(),data->crect.height()); }
(gdb) p data
$1 = (QWidgetData *) 0x1 <========= This is suspicious
(gdb) set logging on
Warning: 'set logging on', an alias for the command 'set logging enabled', is deprecated.
Use 'set logging enabled on'.

Copying output to gdb.txt.
Copying debug output to gdb.txt.
(gdb) set logging file krusader_debug_stack_trace.txt
(gdb) bt
#0  QWidget::rect (this=0x555555930ba0) at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qwidget.h:891
#1  0x00007ffff696a7cc in QWidgetWindow::handleMouseEvent (this=0x555556cddc50, event=0x7fffffffd8b0) at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qwidgetwindow.cpp:639
#2  QWidgetWindow::event (this=0x555556cddc50, event=0x7fffffffd8b0) at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qwidgetwindow.cpp:298
#3  0x00007ffff68fe31a in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x555556cddc50, e=0x7fffffffd8b0) at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qapplication.cpp:3294
#4  0x00007ffff59585a8 in QCoreApplication::notifyInternal2 (receiver=0x555556cddc50, event=0x7fffffffd8b0) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1165
#5  0x00007ffff59585fd in QCoreApplication::sendSpontaneousEvent (receiver=<optimized out>, event=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qcoreapplication.cpp:1623
#6  0x00007ffff5f85d4b in QGuiApplicationPrivate::processMouseEvent (e=0x7fffe0001950) at /usr/src/debug/qt6-base/qtbase/src/gui/kernel/qguiapplication.cpp:2461
#7  0x00007ffff6001284 in QWindowSystemInterface::sendWindowSystemEvents (flags=...) at /usr/src/debug/qt6-base/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:1114
#8  0x00007ffff644da14 in userEventSourceDispatch (source=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:38
#9  0x00007ffff339a559 in g_main_dispatch (context=0x7fffe8000f30) at ../glib/glib/gmain.c:3357
#10 0x00007ffff33fd157 in g_main_context_dispatch_unlocked (context=0x7fffe8000f30) at ../glib/glib/gmain.c:4208
#11 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7fffe8000f30, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4273
#12 0x00007ffff3399a55 in g_main_context_iteration (context=0x7fffe8000f30, may_block=1) at ../glib/glib/gmain.c:4338
#13 0x00007ffff5bbf71d in QEventDispatcherGlib::processEvents (this=0x555555968640, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:396
#14 0x00007ffff5964566 in QEventLoop::processEvents (this=0x7fffffffdd70, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:100
#15 QEventLoop::exec (this=0x7fffffffdd70, flags=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/kernel/qeventloop.cpp:191
#16 0x00007ffff5959a2f in QCoreApplication::exec () at /usr/src/debug/qt6-base/qtbase/src/corelib/global/qflags.h:74
#17 0x00005555555ef20f in ??? ()
#18 0x00007ffff5234e08 in __libc_start_call_main (main=main@entry=0x5555555ea9d0, argc=argc@entry=1, argv=argv@entry=0x7fffffffe1e8) at ../sysdeps/nptl/libc_start_call_main.h:58
#19 0x00007ffff5234ecc in __libc_start_main_impl (main=0x5555555ea9d0, argc=1, argv=0x7fffffffe1e8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe1d8) at ../csu/libc-start.c:360
Comment 8 Alex Chudnovsky 2024-11-01 22:22:05 UTC
When unchecking "Right clicking pops context menu immediately" in Settings - Panel - Selection mode, the first right-click causes the GUI to momentarily disapppear and then reappear (similarly to Alt-Enter) but there is no crash.
Comment 9 Alex Chudnovsky 2024-11-02 00:40:02 UTC
I also noticed that in Dolphin in similar conditions (freshly invoked instance) the very first "Properties" invocation causes the GUI to momentarily disappear and reappear, both via the context menu and via Alt-Enter. So, there are actually two bugs here.
Comment 10 Alex Bikadorov 2024-11-13 14:29:52 UTC
Thanks for all the information!

Your stack trace 
> #1  0x00007ffff696a7cc in QWidgetWindow::handleMouseEvent (this=0x555556cddc50, event=0x7fffffffd8b0) at /usr/src/debug/qt6-base/qtbase/src/widgets/kernel/qwidgetwindow.cpp:639
corresponds to the code https://github.com/qt/qtbase/blob/b839e9b36db3a4e50dfb34521d8ef8de1fd01969/src/widgets/kernel/qwidgetwindow.cpp#L636C1-L645C7

The interesting thing here is the QT_NO_CONTEXTMENU macro. According to https://stackoverflow.com/a/60143763/6286694 it is only active on special embedded systems (or for touch screens?). Is this the case for you? And what is the output of `pacman -Qi qt6-base`?

In any case this looks like a bug in Qt itself and not in Krusader.
Comment 11 Alex Chudnovsky 2024-11-13 14:46:42 UTC
The package is exactly as provided by Arch. There are no touch screens in my setup; the system is just a Dell laptop with an external screen connected. I didn't succeed to check if the issue is reproducible with X11 as the system is fully Wayland and X11 just doesn't start. 



alex@inspiron5620 ~ > pacman -Qi qt6-base                                                                                          01:07   
Name            : qt6-base
Version         : 6.8.0-1
Description     : A cross-platform application and UI framework
Architecture    : x86_64
URL             : https://www.qt.io
Licenses        : GPL3  LGPL3  FDL  custom
Groups          : qt6
Provides        : None
Depends On      : brotli  dbus  double-conversion  fontconfig  freetype2  gcc-libs  glib2  glibc  harfbuzz  icu  krb5  libb2  libcups
                  libdrm  libgl  libice  libinput  libjpeg-turbo  libpng  libproxy  libsm  libx11  libxcb  libxkbcommon  libxkbcommon-x11
                  md4c  mesa  mtdev  openssl  pcre2  shared-mime-info  sqlite  systemd-libs  tslib  vulkan-headers  xcb-util-cursor
                  xcb-util-image  xcb-util-keysyms  xcb-util-renderutil  xcb-util-wm  xdg-utils  zlib  zstd  qt6-translations
Optional Deps   : freetds: MS SQL driver
                  gdk-pixbuf2: GTK platform plugin [installed]
                  gtk3: GTK platform plugin [installed]
                  libfbclient: Firebird/iBase driver
                  mariadb-libs: MariaDB driver [installed]
                  pango: GTK platform plugin [installed]
                  perl: for syncqt [installed]
                  postgresql-libs: PostgreSQL driver
                  qt6-wayland: to run Qt6 applications in a Wayland session [installed]
                  unixodbc: ODBC driver [installed]
Required By     : accounts-qml-module  akonadi  akonadi-calendar  akonadi-calendar-tools  akonadi-contacts  akonadi-import-wizard
                  akonadi-mime  akonadi-notes  akonadi-search  akonadiconsole  analitza  appstream-qt  ark  attica  audiocd-kio  baloo
                  baloo-widgets  blinken  bluedevil  bluez-qt  breeze  breeze-icons  calendarsupport  calligra  colord-kde  digikam
                  discover  dolphin  dolphin-plugins  drkonqi  efibooteditor  elisa  eos-quickstart  eventviews  ffaudioconverter
                  ffmpegthumbs  flatpak-kcm  fooyin-git  frameworkintegration  gnuplot  grantleetheme  gwenview  haruna  incidenceeditor
                  kaccounts-integration  kaccounts-providers  kactivitymanagerd  kaddressbook  kalarm  kalgebra  kamera  karchive  kasts
                  kate  kauth  kbackup  kbookmarks  kcachegrind  kcalc  kcalendarcore  kcalutils  kcharselect  kcmutils  kcodecs
                  kcolorchooser  kcolorpicker  kcolorscheme  kcompletion  kconfig  kconfigwidgets  kcontacts  kcoreaddons  kcrash  kcron
                  kdav  kdbusaddons  kde-cli-tools  kde-gtk-config  kde-inotify-survey  kdeclarative  kdeconnect  kdecoration  kded
                  kdegraphics-mobipocket  kdegraphics-thumbnailers  kdenetwork-filesharing  kdenlive  kdepim-addons  kdepim-runtime
                  kdeplasma-addons  kdesdk-kio  kdesdk-thumbnailers  kdesu  kdf  kdiagram  kdialog  kdiamond  kdiff3  kdnssd  kdoctools
                  kdsingleapplication  kdsoap-qt6  kdsoap-ws-discovery-client  keditbookmarks  kfilemetadata  kfind  kgamma  kget
                  kglobalaccel  kglobalacceld  kgoldrunner  kgpg  kguiaddons  khangman  khelpcenter  kholidays  ki18n  kiconthemes
                  kid3-common  kidentitymanagement  kidletime  kimageannotator  kimageformats  kimap  kinfocenter  kio  kio-admin
                  kio-extras  kio-fuse  kio-gdrive  kio-zeroconf  kirigami  kirigami-addons  kitemmodels  kitemviews  kitinerary
                  kjobwidgets  kjournald  kldap  kleopatra  kmahjongg  kmail  kmail-account-wizard  kmailtransport  kmbox  kmenuedit
                  kmime  kmines  kmplot  knewstuff  knotifications  knotifyconfig  kolourpaint  kompare  konsole  kontact
                  kontactinterface  korganizer  kpackage  kparts  kpat  kpeople  kpimtextedit  kpipewire  kpkpass  kpmcore  kpty
                  kquickcharts  kquickimageeditor  krdc  krdp  krecorder  kreversi  krfb  kruler  krunner  krusader-git  ksanecore
                  kscreen  kscreenlocker  kservice  kshisen  ksmtp  ksshaskpass  kstatusnotifieritem  ksvg  ksystemlog  ksystemstats
                  ktextaddons  ktexteditor  ktexttemplate  ktextwidgets  ktimer  ktnef  ktorrent  ktuberling  kubrick  kunifiedpush
                  kunitconversion  kuserfeedback  kvantum  kwallet  kwalletmanager  kwayland  kwidgetsaddons  kwin  kwindowsystem
                  kwordquiz  kxmlgui  layer-shell-qt  libaccounts-qt  libakonadi  libgravatar  libkcddb  libkcompactdisc  libkdcraw
                  libkdegames  libkdepim  libkeduvocdocument  libkexiv2  libkgapi  libkleo  libkmahjongg  libkomparediff2  libksane
                  libkscreen  libksieve  libksysguard  libktorrent  libplasma  libqaccessibilityclient-qt6  mailcommon  mailimporter
                  marknote  mbox-importer  messagelib  milou  mimetreeparser  mkvtoolnix-cli  modemmanager-qt  mpvqt  networkmanager-qt
                  okular  oxygen  palapeli  parley  partitionmanager  pavucontrol-qt  pdf4qt  phonon-qt6  phonon-qt6-vlc  picmi
                  pim-data-exporter  pim-sieve-editor  pimcommon  plasma-activities  plasma-activities-stats  plasma-browser-integration
                  plasma-desktop  plasma-disks  plasma-firewall  plasma-integration  plasma-nm  plasma-pa  plasma-sdk
                  plasma-systemmonitor  plasma-vault  plasma-welcome  plasma-workspace  plasma5support  plymouth-kcm  polkit-kde-agent
                  polkit-qt6  poppler-qt6  powerdevil  print-manager  prison  pulseaudio-qt  purpose  python-pyqt6  python-pyqt6-webengine
                  qalculate-qt  qca-qt6  qcoro  qgpgme-qt6  qpwgraph  qqc2-breeze-style  qqc2-desktop-style  qt-sudo  qt6-5compat
                  qt6-charts  qt6-connectivity  qt6-declarative  qt6-httpserver  qt6-imageformats  qt6-multimedia  qt6-multimedia-ffmpeg
                  qt6-multimedia-gstreamer  qt6-networkauth  qt6-positioning  qt6-quick3d  qt6-quicktimeline  qt6-scxml  qt6-sensors
                  qt6-serialport  qt6-shadertools  qt6-speech  qt6-svg  qt6-tools  qt6-virtualkeyboard  qt6-wayland  qt6-webchannel
                  qt6-webengine  qt6-websockets  qt6-webview  qt6ct  qt6pas  qtermwidget  qtkeychain-qt6  sddm  sddm-kcm  shotcut
                  signon-kwallet-extension  signon-plugin-oauth2  signon-ui  signond  skanpage  solid  sonnet  spectacle  svgpart
                  syndication  syntax-highlighting  systemsettings  threadweaver  tokodon  wacomtablet  xdg-desktop-portal-kde  yakuake
                  zanshin
Optional For    : cmake  doxygen  graphviz  mlt  opencv  vivaldi-snapshot
Conflicts With  : None
Replaces        : None
Installed Size  : 58.98 MiB
Packager        : Antonio Rojas <arojas@archlinux.org>
Build Date      : Tue 08 Oct 2024 12:51:50
Install Date    : Tue 15 Oct 2024 22:36:24
Install Reason  : Installed as a dependency for another package
Install Script  : No
Validated By    : Signature