Bug 185433 - Open/save dialog cannot open or save filenames containing double quotes
Summary: Open/save dialog cannot open or save filenames containing double quotes
Status: RESOLVED FIXED
Alias: None
Product: frameworks-kio
Classification: Frameworks and Libraries
Component: Open/save dialogs (show other bugs)
Version: 5.45.0
Platform: Compiled Sources Unspecified
: VHI major
Target Milestone: ---
Assignee: Andreas Bontozoglou
URL:
Keywords: testcase, usability
: 189935 211739 218194 308277 329258 355821 362613 424702 (view as bug list)
Depends on:
Blocks:
 
Reported: 2009-02-24 13:31 UTC by Inge Wallin
Modified: 2020-09-23 18:23 UTC (History)
22 users (show)

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


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Inge Wallin 2009-02-24 13:31:50 UTC
Version:            (using KDE 4.2.0)
Installed from:    Compiled From Sources

How to reproduce:

1. Create a file named "foo.txt", including the double quotes.
2. Start kword or possibly any other editor like kate.
   This bug was discovered with kword 2.0beta6
3. Choose File -> Open in the dialog.
4. Open the file

You will get an error message saying the file doesn't exist.
Comment 1 David Faure 2009-02-24 13:36:45 UTC
Yes, happens with kwrite too. Must be the code for multi-selecting files ("a.txt "b.txt"), which removes double-quotes automatically.
Comment 2 Christoph Feck 2009-10-25 17:04:09 UTC
*** Bug 211739 has been marked as a duplicate of this bug. ***
Comment 3 Christoph Feck 2010-10-12 17:40:40 UTC
*** Bug 218194 has been marked as a duplicate of this bug. ***
Comment 4 Christoph Feck 2012-10-24 20:46:42 UTC
*** Bug 308277 has been marked as a duplicate of this bug. ***
Comment 5 Soren Harward 2012-11-20 17:04:12 UTC
I ran into this bug with Amarok.  It's not just multi-select.  It's that when the dialog's selectedUrls() function is called, the URL being returned contains only the portion of the filename that's within the quotes.  So if I had the files:

/home/user/"test".txt
/home/user/this_is_"a_test".txt

calling KFileDialog::selectedUrls() would return

KUrl("file:///home/user/test")
KUrl("file:///home/user/a_test")
Comment 6 Dawit Alemayehu 2013-06-18 04:56:59 UTC
*** Bug 189935 has been marked as a duplicate of this bug. ***
Comment 7 Dawit Alemayehu 2013-06-18 04:59:17 UTC
Someone needs to fix KFileWidget (kdelibs/kfile/kfilewidget.cpp)... Line #1641 at contains the following statement:

             // FIXME: current implementation drawback: a filename can't contain quotes

 Unless that is resolved this problem will remain.
Comment 8 Daniel Faust 2013-09-07 09:00:31 UTC
The multi-selection code seems to be a problem in general. E. g. selecting files containing percent signs only works in single-selection mode. Meaning there are two code paths which is bad for testing.

@Soren:
If a filename contains double quotes, it is falsely detected as a multi-selection string and everything outside of the quotes gets ignored.
Comment 9 Francis Herne 2016-05-03 21:20:37 UTC
This is more serious than it says on the tin.

It affects _saving_ files too...save to FooDoc("quotes").file, and pretty much every KDE app will write to 'quotes'.

Best-case, the file isn't saved to where the user expected it but they notice.
Worse, it's saved somewhere else and they think they've lost all their work.

At least there's a popup before clobbering 'quotes' if it exists, but people aren't good at paying attention to those.
Comment 10 Francis Herne 2017-03-11 03:57:37 UTC
*** Bug 362613 has been marked as a duplicate of this bug. ***
Comment 11 Nate Graham 2018-04-10 21:57:58 UTC
*** Bug 329258 has been marked as a duplicate of this bug. ***
Comment 12 realnobody 2018-04-12 19:31:59 UTC
#c8 mentions percent signs - there are also question marks which cause problems, see Bug 329259 ... possibly a related cause.
Comment 13 realnobody 2018-04-12 19:40:18 UTC
(In reply to realnobody from comment #12)
forget that, I just tried again - and it seems the mentioned "?" case if fixed in the meantime.
Comment 14 Nate Graham 2018-08-22 20:05:31 UTC
*** Bug 355821 has been marked as a duplicate of this bug. ***
Comment 15 Patrick Silva 2020-07-27 13:20:30 UTC
*** Bug 424702 has been marked as a duplicate of this bug. ***
Comment 16 Bug Janitor Service 2020-08-02 10:20:27 UTC
A possibly relevant merge request was started @ https://invent.kde.org/frameworks/kio/-/merge_requests/89
Comment 17 Andreas Bontozoglou 2020-08-02 10:24:26 UTC
Taking this over with an open MR - feel free to take back
Comment 18 Nate Graham 2020-08-02 13:34:30 UTC
Thanks for working on this, Andreas! Much appreciated.
Comment 19 David Faure 2020-09-12 18:04:00 UTC
Git commit 87adf7f6bcbd9baddafda58e2dbf7052eb323358 by David Faure, on behalf of Andreas Bontozoglou.
Committed on 12/09/2020 at 18:03.
Pushed by dfaure into branch 'master'.

[kio] BUG: Allowing double-quotes in open/save dialog

tl;dr: Allowing double-quotes in filenames in KFileWidget by escaping them with `\` and modifying the tokenizer to understand this.

In this patch:

- Introduce `escapeDoubleQuotes` function that is used to escape selected file paths and correctly populate the `locationEdit`

- Disabling old KFileWidgetPrivate::tokenize and writing a new one which works by iterating each character in the `locationEdit` while it remembers if it is in "escape mode" (seen a '\') or not.

- Introducing **public API** `KFileWidget::setSelectedUrls`. This was mainly needed for the tests to work. I originally wanted to test only the tokenizer but (a) this is in private implementation and (b) testing that things are escaped properly in the text-box is also very important

- Adding a test for various filenames that contain a mix of backslashes and quotes

- Adding a new logging category for the kfilewidget.cpp (KIO_KFILEWIDGETS_FW)

- Adding command-line options to `kfilewidgettest_saving_gui` which I used for functional tests at some point. My work there is a bit sloppy atm but I assume this is an auxiliary file (let me now if you want me to clean it up)

Questions:

- Do I need to add a @since in the docblock?

- Do I need to change minor/major version here (and how would I do this)? I am not sure if the addition of `setSelectedUrls` is backwards compatible

M  +105  -0    autotests/kfilewidgettest.cpp
M  +9    -0    src/filewidgets/CMakeLists.txt
M  +98   -46   src/filewidgets/kfilewidget.cpp
M  +8    -0    src/filewidgets/kfilewidget.h
M  +25   -7    tests/kfilewidgettest_saving_gui.cpp

https://invent.kde.org/frameworks/kio/commit/87adf7f6bcbd9baddafda58e2dbf7052eb323358