Bug 173097 - Cannot delete a file with "invalid" characters in its name
Summary: Cannot delete a file with "invalid" characters in its name
Status: RESOLVED DUPLICATE of bug 204768
Alias: None
Product: kio
Classification: Frameworks and Libraries
Component: general (show other bugs)
Version: unspecified
Platform: unspecified Linux
: NOR major
Target Milestone: ---
Assignee: Fabian
URL:
Keywords:
: 206761 (view as bug list)
Depends on:
Blocks:
 
Reported: 2008-10-18 16:38 UTC by Oliver Putz
Modified: 2018-04-17 15:23 UTC (History)
11 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
Screenshot showing files with invalid filename for bug 173097 (5.14 KB, image/png)
2008-10-18 17:12 UTC, Oliver Putz
Details
Empty trash error (21.26 KB, image/jpeg)
2012-11-03 10:02 UTC, tosiara
Details
directory testcase for the bug (98.41 KB, application/x-xz)
2018-04-07 12:01 UTC, Shlomi Fish
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Oliver Putz 2008-10-18 16:38:17 UTC
Version:           1.1.80 (using 4.1.68 (KDE 4.1.68 (KDE 4.2 >= 20081001)), Gentoo)
Compiler:          i686-pc-linux-gnu-gcc
OS:                Linux (i686) release 2.6.26-gentoo-r1

I was looking at a folder (split view) which had some filenames with "invalid" characters (a questionmark in an white oval-shape instead of the actual character) [I guess due to some encoding problems]). 

As I was not able to delete or move that file with dolphin (it complained that the file did not exist) I used the console to delete all files in that folder (rm *). Dolphin then crashed with the backtrace below. Regrettably I haven't been able to reproduce this crash so far...

Application: Dolphin (dolphin), signal SIGABRT

Thread 1 (Thread 0xb602b700 (LWP 9784)):
[KCrash Handler]
#6  0xffffe424 in __kernel_vsyscall ()
#7  0xb6346690 in *__GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#8  0xb6347ed8 in *__GI_abort () at abort.c:88
#9  0xb7d0c32f in qt_message_output (msgType=QtFatalMsg, buf=0xbf904640 "ASSERT: \"node\" in file /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/kdirmodel.cpp, line 439")
    at global/qglobal.cpp:2108
#10 0xb7d0c3ee in qFatal (msg=0xb7e55e7c "ASSERT: \"%s\" in file %s, line %d") at global/qglobal.cpp:2309
#11 0xb7d0c72f in qt_assert (assertion=0xb73cfbc1 "node", file=0xb73cf868 "/var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/kdirmodel.cpp", line=439) at global/qglobal.cpp:1878
#12 0xb72c5e6c in KDirModelPrivate::_k_slotDeleteItems (this=0x819b298, items=@0xbf906878) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/kdirmodel.cpp:439
#13 0xb72c6b8f in KDirModel::qt_metacall (this=0x8157438, _c=QMetaObject::InvokeMetaMethod, _id=2, _a=0xbf90684c) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs_build/kio/kdirmodel.moc:77
#14 0xb7e1c4e1 in QMetaObject::activate (sender=0x818ce18, from_signal_index=<value optimized out>, to_signal_index=16, argv=0xbf90684c) at kernel/qobject.cpp:3028
#15 0xb7e1e3d8 in QMetaObject::activate (sender=0x818ce18, m=0x809f230, local_signal_index=12, argv=0xbf90684c) at kernel/qobject.cpp:3098
#16 0xb72af86f in KDirLister::itemsDeleted (this=0x818ce18, _t1=@0xbf906878) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs_build/kio/kdirlister.moc:277
#17 0xb72b05c7 in KDirLister::Private::emitItemsDeleted (this=0x8157378, _items=@0xbf906928) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/kdirlister.cpp:2316
#18 0xb72b6e4d in KDirListerCache::itemsDeleted (this=0x8160690, listers=@0xbf906af4, deletedItems=@0xbf906928) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/kdirlister.cpp:1617
#19 0xb72b6fe2 in KDirListerCache::deleteUnmarkedItems (this=0x8160690, listers=@0xbf906af4, lstItems=@0x859d650)
    at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/kdirlister.cpp:1611
#20 0xb72b7a49 in KDirListerCache::slotUpdateResult (this=0x8160690, j=0x89102d0) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/kdirlister.cpp:1546
#21 0xb72bcb9a in KDirListerCache::qt_metacall (this=0x8160690, _c=QMetaObject::InvokeMetaMethod, _id=11, _a=0xbf906c1c)
    at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs_build/kio/kdirlister_p.moc:101
#22 0xb7e1c4e1 in QMetaObject::activate (sender=0x89102d0, from_signal_index=<value optimized out>, to_signal_index=7, argv=0xbf906c1c) at kernel/qobject.cpp:3028
#23 0xb7e1e3d8 in QMetaObject::activate (sender=0x89102d0, m=0x809f220, local_signal_index=3, argv=0xbf906c1c) at kernel/qobject.cpp:3098
#24 0xb7b7f9c5 in KJob::result (this=0x89102d0, _t1=0x89102d0) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs_build/kdecore/kjob.moc:186
#25 0xb7b7fe3c in KJob::emitResult (this=0x89102d0) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kdecore/jobs/kjob.cpp:290
#26 0xb7295462 in KIO::SimpleJob::slotFinished (this=0x89102d0) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/job.cpp:489
#27 0xb7295628 in KIO::ListJob::slotFinished (this=0x89102d0) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/job.cpp:2413
#28 0xb7299f3c in KIO::ListJob::qt_metacall (this=0x89102d0, _c=QMetaObject::InvokeMetaMethod, _id=3, _a=0xbf906e38)
    at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs_build/kio/jobclasses.moc:747
#29 0xb7e1c4e1 in QMetaObject::activate (sender=0x91c3840, from_signal_index=<value optimized out>, to_signal_index=8, argv=0x0) at kernel/qobject.cpp:3028
#30 0xb7e1e3d8 in QMetaObject::activate (sender=0x91c3840, m=0xb73f1e84, local_signal_index=4, argv=0x0) at kernel/qobject.cpp:3098
#31 0xb732f29b in KIO::SlaveInterface::finished (this=0x91c3840) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs_build/kio/slaveinterface.moc:163
#32 0xb7330daf in KIO::SlaveInterface::dispatch (this=0x91c3840, _cmd=104, rawdata=@0xbf906fd4) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/slaveinterface.cpp:175
#33 0xb733183f in KIO::SlaveInterface::dispatch (this=0x91c3840) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/slaveinterface.cpp:91
#34 0xb7324b2f in KIO::Slave::gotInput (this=0x91c3840) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/slave.cpp:322
#35 0xb7325e0d in KIO::Slave::qt_metacall (this=0x91c3840, _c=QMetaObject::InvokeMetaMethod, _id=2, _a=0xbf9070f8) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs_build/kio/slave.moc:75
#36 0xb7e1c4e1 in QMetaObject::activate (sender=0x8872720, from_signal_index=<value optimized out>, to_signal_index=4, argv=0x0) at kernel/qobject.cpp:3028
#37 0xb7e1e3d8 in QMetaObject::activate (sender=0x8872720, m=0xb73ee960, local_signal_index=0, argv=0x0) at kernel/qobject.cpp:3098
#38 0xb726aec1 in KIO::Connection::readyRead (this=0x8872720) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs_build/kio/connection.moc:84
#39 0xb726bb53 in KIO::ConnectionPrivate::dequeue (this=0x8955700) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kio/kio/connection.cpp:82
#40 0xb726c8e0 in KIO::Connection::qt_metacall (this=0x8872720, _c=QMetaObject::InvokeMetaMethod, _id=1, _a=0x8b67ac8)
    at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs_build/kio/connection.moc:72
#41 0xb7e13edd in QMetaCallEvent::placeMetaCall (this=0x811e740, object=0x8872720) at kernel/qobject.cpp:535
#42 0xb7e15ba7 in QObject::event (this=0x8872720, e=0x811e740) at kernel/qobject.cpp:1152
#43 0xb67c0fab in QApplicationPrivate::notify_helper (this=0x80b1980, receiver=0x8872720, e=0x811e740) at kernel/qapplication.cpp:3809
#44 0xb67c7ae5 in QApplication::notify (this=0xbf90797c, receiver=0x8872720, e=0x811e740) at kernel/qapplication.cpp:3399
#45 0xb79552b1 in KApplication::notify (this=0xbf90797c, receiver=0x8872720, event=0x811e740) at /var/tmp/portage/kde-base/kdelibs-9999/work/kdelibs-9999/kdeui/kernel/kapplication.cpp:307
#46 0xb7e05b21 in QCoreApplication::notifyInternal (this=0xbf90797c, receiver=0x8872720, event=0x811e740) at kernel/qcoreapplication.cpp:593
#47 0xb7e06984 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x80a1310) at kernel/qcoreapplication.h:215
#48 0xb7e06bc3 in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at kernel/qcoreapplication.cpp:1097
#49 0xb68565a1 in QEventDispatcherX11::processEvents (this=0x80acf48, flags={i = -1081050984}) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:220
#50 0xb7e046b0 in QEventLoop::processEvents (this=0xbf907910, flags={i = -1081050920}) at kernel/qeventloop.cpp:149
#51 0xb7e04852 in QEventLoop::exec (this=0xbf907910, flags={i = -1081050856}) at kernel/qeventloop.cpp:200
#52 0xb7e06c6f in QCoreApplication::exec () at kernel/qcoreapplication.cpp:851
#53 0xb67c0d43 in QApplication::exec () at kernel/qapplication.cpp:3337
#54 0x0807e978 in main (argc=6, argv=0xbf907b34) at /var/tmp/portage/kde-base/dolphin-9999/work/dolphin/apps/dolphin/src/main.cpp:94
Comment 1 Oliver Putz 2008-10-18 16:49:31 UTC
Ok, it just happened again when I deleted all files in a folder where there were some files with "bad encoded filenames". So I guess it really is related to files which have a filename that is somewhat incorrectly encoded...
Comment 2 Oliver Putz 2008-10-18 17:12:04 UTC
Created attachment 27999 [details]
Screenshot showing files with invalid filename for bug 173097

One more info: I dont know if its important, but all the files that have invalid names appear *twice* in the folder (both times with the same filename). (see attached screenshot) Konsole also sees both files in the folder.
Comment 3 Frank Reininghaus 2008-10-18 23:16:16 UTC
I'm reassigning to KIO because KDirLister is where the problem seems to be. Oliver, maybe it would help David (or anyone else who is clever enough to debug this...) if you could say how to create such a file or attach an archive containing a small file with a broken name (assuming that the crash is reproducible if you extract that file on another computer).
Comment 4 Oliver Putz 2008-10-19 11:38:01 UTC
Thanks Frank for the idea of archiving the files. I already thought about attaching them, but that would have destroyed the filename. Never thought of simply archiving them :-) Anyway, I now uploaded an archive containing one (two) files with invalid filenames tn http://www.oliver-putz.de/bugreports/bug173097InvalidFilenames.tar.bz2

Regrettably I cannot exactly describe how I ended up with the broken filenames in the first place... I often copied these files between different filesystems and between computers with different operating systems that all had different default encodings. (e.g. created it on ISO-8859-15 on reiserfs, copied it to FAT32, moved it from there to another reiserfs with UTF8, from there to another computer with ISO-8859-1, and so on and so forth... I can only guess that at any of these steps something went wrong and the non-ASCII characters got corrupted...)
Comment 5 Dawit Alemayehu 2011-05-09 00:51:05 UTC
I cannot duplicate the crash. I can how duplicate the problem with deleting or moving the file using dolphin and I think that happens because of URL encoding/decoding issues which needs to be investigated. Do you still see crash in the more recent versions of KDE (v4.6 and up) ?
Comment 6 tosiara 2012-11-03 10:00:09 UTC
Steps to reproduce delete/rename failure:

0. download sample zip: https://bugzilla.novell.com/attachment.cgi?id=511621
1. open Dolphin
2. right click zip file and select "Extract here" or use unzip: "LANG=en_US.UTF-8 unzip -l test.zip"
3. invalid file appears.
4. rename it
5. get error:

The file or folder ���.txt does not exist.
Comment 7 tosiara 2012-11-03 10:02:56 UTC
Created attachment 74959 [details]
Empty trash error

If you moved a folder with invalid file to trash you won't be able to empty trash anymore
Comment 8 Dawit Alemayehu 2013-06-16 23:40:13 UTC
*** Bug 206761 has been marked as a duplicate of this bug. ***
Comment 9 Stephan Wienczny 2013-08-26 21:54:54 UTC
Has this bug been (partly) fixed in 4.11?
I've got two installations of KDE:
Ubuntu with 4.10.5 crashes when deleting a file named "\x94"
ArchLinux with 4.11.0 can delete the file but KIO-Slaves (fish) are still broken.

The test file was created using
--
#!/usr/bin/python
fo = open("\x94", "wt")
fo.write("\x94")
fo.close()
--
Comment 10 Christoph Feck 2013-08-29 23:23:45 UTC
With 4.11, invalid UTF-8 characters in local filenames are handled better, as long as you use a UTF-8 locale.

As for KIO filenames, there are probably many places, where we do not use encodeFilename() to convert back to 8-bit encoding. This may, or may not be a bug (technically, not practically).
Comment 11 Dawit Alemayehu 2013-08-31 17:17:18 UTC
(In reply to comment #9)
> Has this bug been (partly) fixed in 4.11?
> I've got two installations of KDE:
> Ubuntu with 4.10.5 crashes when deleting a file named "\x94"
> ArchLinux with 4.11.0 can delete the file but KIO-Slaves (fish) are still
> broken.
> 
> The test file was created using
> --
> #!/usr/bin/python
> fo = open("\x94", "wt")
> fo.write("\x94")
> fo.close()
> --

As far as I know, kio_fish has no maintainer. I presume you use kio_fish for ssh connection, if so you and everyone else should be using kio_sftp which is actively maintained and should work correctly for your use case.
Comment 12 ariasuni 2015-10-03 23:28:05 UTC
I still have the problem with latest KDE Plasma/Applications/Frameworks stack. I can provide file than can reproduce the problem. It’s a real usability problem that users must use command line to make something with a file.
Comment 13 Shlomi Fish 2018-04-07 12:01:33 UTC
Created attachment 111886 [details]
directory testcase for the bug

This is a directory that after it is deleted, cannot be emptied from the trash / wastebin by dolphin - tested on Mageia x7 x86-64 with kf5/plasma5. Annoying.
Comment 14 Patrick Silva 2018-04-08 14:44:17 UTC
A few days ago I could not delete nor open a vídeo file containing an invalid character in its name on Arch Linux, Dolphin 17.12.3, frameworks 5.44.
Dolphin shown the error "file not found".
Comment 15 Christoph Feck 2018-04-09 11:33:01 UTC
Could be solved with bug 204768, while the underlying real issue (bug 165044) cannot be fixed, see bug 165044 comment #159.
Comment 16 Patrick Silva 2018-04-09 12:00:40 UTC
link from comment 159 gives "page not found".

Why can pcmanfm-qt delete/rename a file containing invalid character and Dolphin not?
Comment 17 Fabian 2018-04-09 12:24:15 UTC
@Dr. Chapatin: The new link would be http://doc.qt.io/qt-5/qfile-obsolete.html#setEncodingFunction . Basically the Qt project considered the function flawed, and it does nothing anymore in Qt 5. Thus, with Qt it is pretty much impossible to handle non-unicode filenames. I wrote a bit in a mail about this at https://mail.kde.org/pipermail/kde-frameworks-devel/2018-April/061092.html 

Now why does pcmanfm-qt handle this case? Well, pcmanfm-qt doesn't use KIO or Qt's file handling functionality, but instead uses libfm-qt, which wraps the from GIO. GIO is GTK+'s input/output abstraction library, and it happens to be file encoding agnostic.

Unfortunately, it is not possible to simply switch out KIO with GIO in Dolphin, without a massive rewrite of the application; and even if we did it, we might lose some functionality that GIO in turn lacks and that KIO provides.
Comment 18 Nate Graham 2018-04-17 15:23:43 UTC

*** This bug has been marked as a duplicate of bug 204768 ***