Bug 463796 - KIO::copy Segmentation fault
Summary: KIO::copy Segmentation fault
Status: RESOLVED UNMAINTAINED
Alias: None
Product: frameworks-kio
Classification: Frameworks and Libraries
Component: general (show other bugs)
Version: 5.101.0
Platform: OpenBSD OpenBSD
: NOR normal
Target Milestone: ---
Assignee: KIO Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-01-03 20:45 UTC by Rafael Sadowski
Modified: 2024-03-29 11:41 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rafael Sadowski 2023-01-03 20:45:43 UTC
For a long time there has been a really annoying crash in all KDE applications. For example:
    You will just copy/paste a file in dolphin file browser.
    “Save as” in Okular - Universal Document Viewer.

I  found out it's in FileProtocol::copy / KIO::copy and I wrote a simple test to reproduce the crash:

```
KIOFileCopy::KIOFileCopy()
{
    QList<QUrl> sourceUrl = { QUrl::fromLocalFile(QLatin1String("/home/rsadowski/src/kio_file_copy/build/bin/fileA.txt")) };
    const QUrl destinationUrl = QUrl::fromLocalFile(QLatin1String("/home/rsadowski/src/kio_file_copy/build/bin/fileB.txt"));

    KIO::CopyJob* job = KIO::copy(sourceUrl, destinationUrl, KIO::DefaultFlags );
}
```

Debug output:
```
# ./kio_file_copy
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-rsadowski'
kf.crash: Could not find drkonqi in search paths: ("/home/rsadowski/src/kio_file_copy/build/bin", "/usr/local/lib/qt5/libexec", "/usr/local/libexec")
kf.kio.core.copyjob: (QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileA.txt")) QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileB.txt")
kf.kio.widgets: Failed to check which JobView API is supported "The name org.kde.kuiserver was not provided by any .service files"
kf.coreaddons: Checking for plugins in ("/home/rsadowski/src/kio_file_copy/build/bin/kf5/kio", "/usr/local/lib/qt5/plugins/kf5/kio")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/kio_file.so" supports protocols ("file")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/kio_ftp.so" supports protocols ("ftp")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/kio_ghelp.so" supports protocols ("ghelp")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/kio_help.so" supports protocols ("help")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/kio_http.so" supports protocols ("http", "https", "webdav", "webdavs")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/kio_remote.so" supports protocols ("remote")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/kio_trash.so" supports protocols ("trash")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/ldap.so" supports protocols ("ldap", "ldaps")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/akonadi.so" supports protocols ("akonadi")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/kio_msits.so" supports protocols ("ms-its")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/baloosearch.so" supports protocols ("baloosearch")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/tags.so" supports protocols ("tags")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/timeline.so" supports protocols ("timeline")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/about.so" supports protocols ("about")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/activities.so" supports protocols ("activities")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/archive.so" supports protocols ("ar", "sevenz", "tar", "zip")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/bookmarks.so" supports protocols ("bookmarks")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/filter.so" supports protocols ("bzip", "bzip2", "gzip", "lzma", "xz", "zstd")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/fish.so" supports protocols ("fish")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/info.so" supports protocols ("info")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/kio_filenamesearch.so" supports protocols ("filenamesearch")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/man.so" supports protocols ("man")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/mtp.so" supports protocols ("mtp")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/recentdocuments.so" supports protocols ("recentdocuments")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/recentlyused.so" supports protocols ("recentlyused")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/sftp.so" supports protocols ("sftp")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/smb.so" supports protocols ("cifs", "smb")
kf.kio.core: "/usr/local/lib/qt5/plugins/kf5/kio/thumbnail.so" supports protocols ("thumbnail")
kf.kio.core.copyjob: CopyJob: stating the dest QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileB.txt")
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-rsadowski'
kf.kio.core: 0xad7a97c3040 Creating threaded worker
kf.kio.core.copyjob: d->state= 1
kf.kio.core.copyjob: 
kf.kio.core.copyjob: dest is dir: false
kf.kio.core.copyjob: KIO::stat on QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileA.txt")
kf.kio.core.copyjob: d->state= 1
kf.kio.core.copyjob: 
kf.kio.core.copyjob: fileName= "fileA.txt" url= QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileA.txt")
kf.kio.core.copyjob: uSource= QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileA.txt") uDest(1)= QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileB.txt")
kf.kio.core.copyjob:  uDest(2)= QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileB.txt")
kf.kio.core.copyjob:   QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileA.txt") -> QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileB.txt")
kf.kio.core.copyjob: Source is a file (or a symlink), or we are linking -> no recursive listing
kf.kio.core.copyjob: Setting m_dest to QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileB.txt")
kf.kio.core.copyjob: Stating finished. To copy: 7 , available: 30130962432
kf.kio.core.copyjob: 
kf.kio.core.copyjob: preparing to copy QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileA.txt") 7 30130962432
kf.kio.core.copyjob: copying "/home/rsadowski/src/kio_file_copy/build/bin/fileB.txt"
kf.kio.core.copyjob: Copying QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileA.txt") to QUrl("file:///home/rsadowski/src/kio_file_copy/build/bin/fileB.txt")
zsh: segmentation fault (core dumped)  ./kio_file_copy

```
The trace:
```
Program terminated with signal SIGSEGV, Segmentation fault.
#0  FileProtocol::copy (this=0xad760fd3980, srcUrl=..., destUrl=..., _mode=420, _flags=...) at /usr/ports/pobj/kio-5.101.0/kio-5.101.0/src/ioslaves/file/file_unix.cpp:678
678         if (privilegeOperationUnitTestMode()) {
[Current thread is 1 (process 431561)]
(gdb) bt
#0  FileProtocol::copy (this=0xad760fd3980, srcUrl=..., destUrl=..., _mode=420, _flags=...) at /usr/ports/pobj/kio-5.101.0/kio-5.101.0/src/ioslaves/file/file_unix.cpp:678
#1  0x00000ad7d832dd53 in KIO::SlaveBase::dispatch (this=0xad760fd3990, command=<optimized out>, data=...) at /usr/ports/pobj/kio-5.101.0/kio-5.101.0/src/core/slavebase.cpp:1364
#2  0x00000ad7d8327d05 in KIO::SlaveBase::dispatchLoop (this=0xad760fd3990) at /usr/ports/pobj/kio-5.101.0/kio-5.101.0/src/core/slavebase.cpp:339
#3  0x00000ad7d83bf803 in KIO::WorkerThread::run (this=0xad79475cf40) at /usr/ports/pobj/kio-5.101.0/kio-5.101.0/src/core/workerthread.cpp:62
#4  0x00000ad75255e28c in QThreadPrivate::start(void*) () from /usr/local/lib/qt5/./libQt5Core.so.4.0
#5  0x00000ad8015b9a11 in _rthread_start (v=<optimized out>) at /usr/src/lib/librthread/rthread.c:96
#6  0x00000ad81d6f9ada in __tfork_thread () at /usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:84
```

Unfortunately I don't make any progress when debugging and would appreciate any ideas.




SOFTWARE/OS VERSIONS
OpenBSD
KDE Frameworks Version: 5.101.0 
Qt Version: Qt 5.15.7

ADDITIONAL INFORMATION
Comment 1 Rafael Sadowski 2023-01-05 20:37:03 UTC
This issue can be fixed by disabling threaded kio_copy.
https://github.com/openbsd/ports/blob/master/devel/kf5/kio/patches/patch-src_core_slave_cpp
Comment 2 Méven Car 2024-03-29 11:18:01 UTC
I am sorry KIO 5 won't receive any new releases.
Also the latest `5.115.0` might have this issue.

This shouldn't be reproducible with KF6 / plasma6 for when you will be able to upgrade.

> This issue can be fixed by disabling threaded kio_copy.

It is the whole `file://` protocol that runs in a thread instead of a process.
Comment 3 Nicolas Fella 2024-03-29 11:41:33 UTC
> I am sorry KIO 5 won't receive any new releases.

that is not correct. There will be future KF5 releases, just not as frequent as before