Bug 515511

Summary: Trash crashed after attempt to delete the folder
Product: [Frameworks and Libraries] frameworks-kio Reporter: Arsenij <arsenijnochevnyj>
Component: generalAssignee: KIO Bugs <kio-bugs-null>
Status: NEEDSINFO WAITINGFORINFO    
Severity: crash CC: kdedev, kdelibs-bugs-null
Priority: NOR Keywords: drkonqi
Version First Reported In: 6.22.0   
Target Milestone: ---   
Platform: Neon   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description Arsenij 2026-02-04 16:51:01 UTC
Application: kioworker (6.22.1)

ApplicationNotResponding [ANR]: false
Qt Version: 6.10.1
Frameworks Version: 6.22.0
Operating System: Linux 6.14.0-37-generic x86_64
Windowing System: Wayland
Distribution: KDE neon User Edition
DrKonqi: 6.5.5 [CoredumpBackend]

-- Information about the crash:
Unpacked the archive partially (via Ark), canceled the unpack, tried to delete the folder, crashed every time as I tried. I experienced same behavior before, and both of times when files are created with size, less than full (partial created files that grow in size), both ways to fix - as I remember or restart the Dolphin, or restart the whole system.

(sorry but I was curious and) Claude concluded that it's handler of the file size (weird since how I can delete the big files then? nvm, tested and I still can't delete big files before reboot, nor 6+ GB file, nor folder that contains it, but can delete folder with smaller file), cite:
The crash occurred in KDE's Trash system when trying to move a file to trash. Specifically:
The problem (line #16-18):
qCheckedFPConversionToInteger<int, double>(value=6704756736.5)
qRound(d=6704756736)
TrashImpl::adaptTrashSize
Root cause: The trash implementation tried to convert a very large file size (6704756736.5 bytes ≈ 6.7 GB) from a double to an int, which caused an integer overflow.

int maximum value is ~2.1 billion (2,147,483,647)
The file size was 6.7 billion bytes
This triggered Qt's assertion check and crashed the program

What was happening:

You were moving a file to trash (line #20: TrashImpl::moveToTrash)
The system was trying to update the trash size metadata (line #18: adaptTrashSize)
It tried to round a file size that was too large to fit in a 32-bit integer
Qt detected the overflow and aborted to prevent corruption

The crash can be reproduced every time.

-- Backtrace:
Application: kioworker (kioworker), signal: Aborted

[New LWP 161780]
[New LWP 161781]

This GDB supports auto-downloading debuginfo from the following URLs:
  <https://debuginfod.neon.kde.org/>
  <https://debuginfod.ubuntu.com/>
Enable debuginfod for this session? (y or [n]) [answered N; input not from terminal]
Debuginfod has been disabled.
To make this setting permanent, add 'set debuginfod enabled off' to .gdbinit.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/lib/x86_64-linux-gnu/libexec/kf6/kioworker /usr/lib/x86_64-linux-gnu/qt6/plugi'.
Program terminated with signal SIGABRT, Aborted.
#0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44

warning: 44	./nptl/pthread_kill.c: No such file or directory
[Current thread is 1 (Thread 0x6ffdf19e33c0 (LWP 161780))]
add symbol table from file "/lib/x86_64-linux-gnu/libc.so.6"
add symbol table from file "/lib/x86_64-linux-gnu/libKF6Crash.so.6"
add symbol table from file "/lib/x86_64-linux-gnu/libQt6Core.so.6"
add symbol table from file "/usr/lib/x86_64-linux-gnu/qt6/plugins/kf6/kio/kio_trash.so"
add symbol table from file "/lib/x86_64-linux-gnu/libKF6KIOCore.so.6"
add symbol table from file "/usr/lib/x86_64-linux-gnu/libexec/kf6/kioworker"
[Current thread is 1 (Thread 0x6ffdf19e33c0 (LWP 161780))]

Thread 2 (Thread 0x6ffdf11896c0 (LWP 161781)):
#0  0x00006ffdf671b4fd in __GI___poll (fds=0x6ffdec0013b0, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00006ffdf64b26be in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0xffffffff00000001 in ?? ()
#3  0x00006ffdf11886d4 in ?? ()
#4  0xffffffff7fffffff in ?? ()
#5  0xf6e3e118edd9fd00 in ?? ()
#6  0x00006ffdf1188710 in ?? ()
#7  0x00006ffdec000c90 in ?? ()
#8  0x0000000000000001 in ?? ()
#9  0x00006ffdec000b90 in ?? ()
#10 0x0000000000000000 in ?? ()

Thread 1 (Thread 0x6ffdf19e33c0 (LWP 161780)):
[KCrash Handler]
#6  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:44
#7  __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
#8  __GI___pthread_kill (threadid=<optimized out>, signo=6) at ./nptl/pthread_kill.c:89
#9  0x00006ffdf664527e in __GI_raise (sig=6) at ../sysdeps/posix/raise.c:26
#10 0x00006ffdf66288ff in __GI_abort () at ./stdlib/abort.c:79
#11 0x00006ffdf7332891 in qAbort () at /usr/src/qt6-base-6.10.1-0zneon+24.04+noble+release+build145/src/corelib/global/qassert.cpp:46
#12 qt_maybe_message_fatal<QString&> (message=..., context=..., msgType=QtFatalMsg) at /usr/src/qt6-base-6.10.1-0zneon+24.04+noble+release+build145/src/corelib/global/qlogging.cpp:2166
#13 qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *) (msgType=msgType@entry=QtFatalMsg, context=..., msg=msg@entry=0x6ffdf704e8e8 "ASSERT: \"%s\" in file %s, line %d", ap=ap@entry=0x7ffcf9d8a258) at /usr/src/qt6-base-6.10.1-0zneon+24.04+noble+release+build145/src/corelib/global/qlogging.cpp:412
#14 0x00006ffdf7333653 in QMessageLogger::fatal (this=<optimized out>, msg=0x6ffdf704e8e8 "ASSERT: \"%s\" in file %s, line %d") at /usr/src/qt6-base-6.10.1-0zneon+24.04+noble+release+build145/src/corelib/global/qlogging.cpp:901
#15 0x00006ffdf7321020 in qt_assert (assertion=<optimized out>, file=<optimized out>, line=<optimized out>) at /usr/src/qt6-base-6.10.1-0zneon+24.04+noble+release+build145/src/corelib/global/qassert.cpp:113
#16 0x00006ffdf13d2932 in QtPrivate::qCheckedFPConversionToInteger<int, double, true, true> (value=6704756736.5) at /usr/include/x86_64-linux-gnu/qt6/QtCore/qnumeric.h:516
#17 0x00006ffdf13cfb99 in qRound (d=6704756736) at /usr/include/x86_64-linux-gnu/qt6/QtCore/qnumeric.h:565
#18 0x00006ffdf13cf1ad in TrashImpl::adaptTrashSize (this=0x7ffcf9d8aca0, origPath=..., trashId=0) at /workspace/build/src/kioworkers/trash/trashimpl.cpp:1331
#19 0x00006ffdf13c99d5 in TrashImpl::moveToTrash (this=0x7ffcf9d8aca0, origPath=..., trashId=0, fileId=...) at /workspace/build/src/kioworkers/trash/trashimpl.cpp:393
#20 0x00006ffdf13bbd1a in TrashProtocol::copyOrMoveToTrash (this=0x7ffcf9d8ac80, src=..., dest=..., action=TrashProtocol::Move) at /workspace/build/src/kioworkers/trash/kio_trash.cpp:270
#21 0x00006ffdf13bad6a in TrashProtocol::rename (this=0x7ffcf9d8ac80, oldURL=..., newURL=..., flags=...) at /workspace/build/src/kioworkers/trash/kio_trash.cpp:186
#22 0x00006ffdf7705f98 in KIO::WorkerSlaveBaseBridge::rename (this=0x64bb535628a0, src=..., dest=..., flags=...) at /workspace/build/src/core/workerbase_p.h:131
#23 0x00006ffdf76fc8d6 in KIO::SlaveBase::dispatch (this=0x64bb535628a0, command=73, data=...) at /workspace/build/src/core/slavebase.cpp:1199
#24 0x00006ffdf76f7211 in KIO::SlaveBase::dispatchLoop (this=0x64bb535628a0) at /workspace/build/src/core/slavebase.cpp:330
#25 0x00006ffdf770383a in KIO::WorkerBase::dispatchLoop (this=0x7ffcf9d8ac90) at /workspace/build/src/core/workerbase.cpp:27
#26 0x00006ffdf13b9a5b in kdemain (argc=4, argv=0x7ffcf9d8ae78) at /workspace/build/src/kioworkers/trash/kio_trash.cpp:51
#27 0x000064bb4e79499b in main (argc=5, argv=0x7ffcf9d8afe8) at /workspace/build/src/kioworker/kioworker.cpp:144

Reported using DrKonqi
Comment 1 Arsenij 2026-02-04 17:15:10 UTC
(In reply to Arsenij from comment #0)
> Application: kioworker (6.22.1)
> 
> ApplicationNotResponding [ANR]: false
> Qt Version: 6.10.1
> Frameworks Version: 6.22.0
> Operating System: Linux 6.14.0-37-generic x86_64
> Windowing System: Wayland
> Distribution: KDE neon User Edition
> DrKonqi: 6.5.5 [CoredumpBackend]
> 
> -- Information about the crash:
> Unpacked the archive partially (via Ark), canceled the unpack, tried to
> delete the folder, crashed every time as I tried. I experienced same
> behavior before, and both of times when files are created with size, less
> than full (partial created files that grow in size), both ways to fix - as I
> remember or restart the Dolphin, or restart the whole system.
> 
> (sorry but I was curious and) Claude concluded that it's handler of the file
> size (weird since how I can delete the big files then? nvm, tested and I
> still can't delete big files before reboot, nor 6+ GB file, nor folder that
> contains it, but can delete folder with smaller file), cite:
> The crash occurred in KDE's Trash system when trying to move a file to
> trash. Specifically:
> The problem (line #16-18):
> qCheckedFPConversionToInteger<int, double>(value=6704756736.5)
> qRound(d=6704756736)
> TrashImpl::adaptTrashSize
> Root cause: The trash implementation tried to convert a very large file size
> (6704756736.5 bytes ≈ 6.7 GB) from a double to an int, which caused an
> integer overflow.
> 
> int maximum value is ~2.1 billion (2,147,483,647)
> The file size was 6.7 billion bytes
> This triggered Qt's assertion check and crashed the program
> 
> What was happening:
> 
> You were moving a file to trash (line #20: TrashImpl::moveToTrash)
> The system was trying to update the trash size metadata (line #18:
> adaptTrashSize)
> It tried to round a file size that was too large to fit in a 32-bit integer
> Qt detected the overflow and aborted to prevent corruption
> 
> The crash can be reproduced every time.
> 
> -- Backtrace:
> Application: kioworker (kioworker), signal: Aborted
> 
> [New LWP 161780]
> [New LWP 161781]
> 
> This GDB supports auto-downloading debuginfo from the following URLs:
>   <https://debuginfod.neon.kde.org/>
>   <https://debuginfod.ubuntu.com/>
> Enable debuginfod for this session? (y or [n]) [answered N; input not from
> terminal]
> Debuginfod has been disabled.
> To make this setting permanent, add 'set debuginfod enabled off' to .gdbinit.
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
> Core was generated by `/lib/x86_64-linux-gnu/libexec/kf6/kioworker
> /usr/lib/x86_64-linux-gnu/qt6/plugi'.
> Program terminated with signal SIGABRT, Aborted.
> #0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized
> out>) at ./nptl/pthread_kill.c:44
> 
> warning: 44	./nptl/pthread_kill.c: No such file or directory
> [Current thread is 1 (Thread 0x6ffdf19e33c0 (LWP 161780))]
> add symbol table from file "/lib/x86_64-linux-gnu/libc.so.6"
> add symbol table from file "/lib/x86_64-linux-gnu/libKF6Crash.so.6"
> add symbol table from file "/lib/x86_64-linux-gnu/libQt6Core.so.6"
> add symbol table from file
> "/usr/lib/x86_64-linux-gnu/qt6/plugins/kf6/kio/kio_trash.so"
> add symbol table from file "/lib/x86_64-linux-gnu/libKF6KIOCore.so.6"
> add symbol table from file "/usr/lib/x86_64-linux-gnu/libexec/kf6/kioworker"
> [Current thread is 1 (Thread 0x6ffdf19e33c0 (LWP 161780))]
> 
> Thread 2 (Thread 0x6ffdf11896c0 (LWP 161781)):
> #0  0x00006ffdf671b4fd in __GI___poll (fds=0x6ffdec0013b0, nfds=2,
> timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
> #1  0x00006ffdf64b26be in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
> #2  0xffffffff00000001 in ?? ()
> #3  0x00006ffdf11886d4 in ?? ()
> #4  0xffffffff7fffffff in ?? ()
> #5  0xf6e3e118edd9fd00 in ?? ()
> #6  0x00006ffdf1188710 in ?? ()
> #7  0x00006ffdec000c90 in ?? ()
> #8  0x0000000000000001 in ?? ()
> #9  0x00006ffdec000b90 in ?? ()
> #10 0x0000000000000000 in ?? ()
> 
> Thread 1 (Thread 0x6ffdf19e33c0 (LWP 161780)):
> [KCrash Handler]
> #6  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized
> out>) at ./nptl/pthread_kill.c:44
> #7  __pthread_kill_internal (signo=6, threadid=<optimized out>) at
> ./nptl/pthread_kill.c:78
> #8  __GI___pthread_kill (threadid=<optimized out>, signo=6) at
> ./nptl/pthread_kill.c:89
> #9  0x00006ffdf664527e in __GI_raise (sig=6) at ../sysdeps/posix/raise.c:26
> #10 0x00006ffdf66288ff in __GI_abort () at ./stdlib/abort.c:79
> #11 0x00006ffdf7332891 in qAbort () at
> /usr/src/qt6-base-6.10.1-0zneon+24.04+noble+release+build145/src/corelib/
> global/qassert.cpp:46
> #12 qt_maybe_message_fatal<QString&> (message=..., context=...,
> msgType=QtFatalMsg) at
> /usr/src/qt6-base-6.10.1-0zneon+24.04+noble+release+build145/src/corelib/
> global/qlogging.cpp:2166
> #13 qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef
> __va_list_tag __va_list_tag *) (msgType=msgType@entry=QtFatalMsg,
> context=..., msg=msg@entry=0x6ffdf704e8e8 "ASSERT: \"%s\" in file %s, line
> %d", ap=ap@entry=0x7ffcf9d8a258) at
> /usr/src/qt6-base-6.10.1-0zneon+24.04+noble+release+build145/src/corelib/
> global/qlogging.cpp:412
> #14 0x00006ffdf7333653 in QMessageLogger::fatal (this=<optimized out>,
> msg=0x6ffdf704e8e8 "ASSERT: \"%s\" in file %s, line %d") at
> /usr/src/qt6-base-6.10.1-0zneon+24.04+noble+release+build145/src/corelib/
> global/qlogging.cpp:901
> #15 0x00006ffdf7321020 in qt_assert (assertion=<optimized out>,
> file=<optimized out>, line=<optimized out>) at
> /usr/src/qt6-base-6.10.1-0zneon+24.04+noble+release+build145/src/corelib/
> global/qassert.cpp:113
> #16 0x00006ffdf13d2932 in QtPrivate::qCheckedFPConversionToInteger<int,
> double, true, true> (value=6704756736.5) at
> /usr/include/x86_64-linux-gnu/qt6/QtCore/qnumeric.h:516
> #17 0x00006ffdf13cfb99 in qRound (d=6704756736) at
> /usr/include/x86_64-linux-gnu/qt6/QtCore/qnumeric.h:565
> #18 0x00006ffdf13cf1ad in TrashImpl::adaptTrashSize (this=0x7ffcf9d8aca0,
> origPath=..., trashId=0) at
> /workspace/build/src/kioworkers/trash/trashimpl.cpp:1331
> #19 0x00006ffdf13c99d5 in TrashImpl::moveToTrash (this=0x7ffcf9d8aca0,
> origPath=..., trashId=0, fileId=...) at
> /workspace/build/src/kioworkers/trash/trashimpl.cpp:393
> #20 0x00006ffdf13bbd1a in TrashProtocol::copyOrMoveToTrash
> (this=0x7ffcf9d8ac80, src=..., dest=..., action=TrashProtocol::Move) at
> /workspace/build/src/kioworkers/trash/kio_trash.cpp:270
> #21 0x00006ffdf13bad6a in TrashProtocol::rename (this=0x7ffcf9d8ac80,
> oldURL=..., newURL=..., flags=...) at
> /workspace/build/src/kioworkers/trash/kio_trash.cpp:186
> #22 0x00006ffdf7705f98 in KIO::WorkerSlaveBaseBridge::rename
> (this=0x64bb535628a0, src=..., dest=..., flags=...) at
> /workspace/build/src/core/workerbase_p.h:131
> #23 0x00006ffdf76fc8d6 in KIO::SlaveBase::dispatch (this=0x64bb535628a0,
> command=73, data=...) at /workspace/build/src/core/slavebase.cpp:1199
> #24 0x00006ffdf76f7211 in KIO::SlaveBase::dispatchLoop (this=0x64bb535628a0)
> at /workspace/build/src/core/slavebase.cpp:330
> #25 0x00006ffdf770383a in KIO::WorkerBase::dispatchLoop
> (this=0x7ffcf9d8ac90) at /workspace/build/src/core/workerbase.cpp:27
> #26 0x00006ffdf13b9a5b in kdemain (argc=4, argv=0x7ffcf9d8ae78) at
> /workspace/build/src/kioworkers/trash/kio_trash.cpp:51
> #27 0x000064bb4e79499b in main (argc=5, argv=0x7ffcf9d8afe8) at
> /workspace/build/src/kioworker/kioworker.cpp:144
> 
> Reported using DrKonqi

Additionals:
After reboot I still can't delete them, and my free space on the drive is ~3GB, that's more than a file size, so for me it's unknown "why"
Comment 2 TraceyC 2026-02-04 18:32:12 UTC
Thanks for the bug report. Please avoid copying previous messages into your replies, as this causes duplicate text and makes the report harder to read through.

I have a few questions so we can try to reproduce this crash.

1. What kind of archive file is the file you had started to decompress, and how large is it?
2. Can you clarify if you're able to delete other large files or not? If there is a problem with large files what are the file sizes?

This may be caused by there not being enough free space on the disk for the delete operation, but kioworker should handle this more gracefully.
Comment 3 Arsenij 2026-02-04 19:05:42 UTC
Sorry, wasn't pay attention when replied to my own.

1. It's regular .zip archive from Google Photos (bundled download files; archive size is 6,8 GiB); decompressed size will be around the same. I started the decompress and then canceled (tried to test the integrity of download), so it must be ~3 GB already decompressed
2. I noticed that I currently unable to delete any file that was large enough (this archive for example), I have 23,9 GiB free (on system drive where I attempt to delete; Download folder), and I can't delete the file bigger than 6,2 GiB (6 704 582 656), tested right now with dd and temp files. I can delete the file of 6,2 GiB (6394MiB), but not 1 MiB more (tested with three 2 GiB and one 394 MiB files, try to delete the one additional MiB and got an crash)

Additional: the system is week old and from fresh install and have all updates. For investigation purposes I can make an image of the current system partition (and delete only sensitive data) if it will be better or make more sense. I'll be happy to try to help by anything I have and know
Comment 4 Arsenij 2026-02-04 22:47:49 UTC
Upd: problem persists on the external drive also