nextcloud / nextcloud/desktop

[Windows/VFS]: On-demand VFS breaks when encountering file names with forbidden characters

Open
#9,524 0 comments 5 reactions 0 assignees View on GitHub
1. to develop bug feature: :minidisc: virtual filesystem os: :door: Windows Prio: high
Dominant language
C++
Stars
3.9k
Forks
1k
Avg merge
1d 17h
Merged PRs (30d)
123

Description

### ⚠️ Before submitting, please verify the following: ⚠️

- [x] This is a **bug**, not a question or a configuration issue.
- [x] This issue is **not** already reported on Github (I've searched it).
- [x] Nextcloud Server and Desktop Client are **up to date**. See [Server Maintenance and Release Schedule](https://github.com/nextcloud/server/wiki/Maintenance-and-Release-Schedule) and [Desktop Releases](https://nextcloud.com/install/#install-clients) for supported versions.
- [x] I agree to follow Nextcloud's [Code of Conduct](https://nextcloud.com/contribute/code-of-conduct/)

### Bug description

Attempting to navigate to a virtual directory that contains files with forbidden characters (e.g. `:`, `<`, ...) does not work, failing with a *"The cloud operation was unsuccessful."* error.
It seems like once that error appeared, further attempts at navigating to it fail with a *"The cloud operation was not completed before the time-out period expired."* error until a reboot.

### Steps to reproduce

1. On the Nextcloud server: create a folder containing a file whose name contains a special character (e.g. `testdir/13:37.md`
2. Navigate to the `testdir/` directory with VFS enabled

### Expected behavior

The file should not appear, and a warning message should appear in the tray window.

### Which files are affected by this bug

`testdir/13:37.md`

### Operating system

Windows

### Which version of the operating system you are running.

Windows 11

### Package

Compiled it myself

### Nextcloud Server version

not relevant

### Nextcloud Desktop Client version

33.0.0-rc1

### Is this bug present after an update or on a fresh install?

Fresh desktop client install

### Are you using the Nextcloud Server Encryption module?

Encryption is Disabled

### Are you using an external user-backend?

- [x] Default internal user-backend
- [ ] LDAP/ Active Directory
- [ ] SSO - SAML
- [ ] Other

### Nextcloud Server logs

```shell
not relevant
```

### Additional info

Logs from the initial navigation attempt:

```
2026-02-26 10:00:40:522 [ debug nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:509 ] [ cfApiFetchPlaceHolders ]: Fetch placeholders callback called. File size: 0
2026-02-26 10:00:40:525 [ debug nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:510 ] [ cfApiFetchPlaceHolders ]: Desktop client proccess id: 11320
2026-02-26 10:00:40:527 [ debug nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:511 ] [ cfApiFetchPlaceHolders ]: Fetch placeholders requested by proccess id: 6232
2026-02-26 10:00:40:529 [ debug nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:512 ] [ cfApiFetchPlaceHolders ]: Fetch placeholders requested by application id: "UNKNOWN"
2026-02-26 10:00:40:531 [ debug nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:513 ] [ cfApiFetchPlaceHolders ]: Fetch placeholders requested for path "C:\\Users\\jyrki\\New folder (3)\\testdir"
2026-02-26 10:00:40:533 [ debug nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:515 ] [ cfApiFetchPlaceHolders ]: Fetch placeholders requested with pattern: "*"
2026-02-26 10:00:40:550 [ debug nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:559 ] [ cfApiFetchPlaceHolders ]: fetch placeholder: "C:\\Users\\jyrki\\New folder (3)\\testdir" "testdir" "1dca6f14bcbe8d6"
2026-02-26 10:00:40:561 [ info nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:590 ]: ls prop requested "C:\\Users\\jyrki\\New folder (3)\\testdir" "testdir"
2026-02-26 10:00:40:566 [ info nextcloud.sync.account C:\Nextcloud\desktop\src\libsync\account.cpp:1218 ]: ls col job requested for "testdir"
2026-02-26 10:00:40:568 [ info nextcloud.sync.accessmanager C:\Nextcloud\desktop\src\libsync\accessmanager.cpp:72 ]: 6 "PROPFIND" "https://nextcloud.local/remote.php/dav/files/Testuser/testdir" has X-Request-ID "5a3d969d-b2a2-40c3-b405-7e4e3debe819"
2026-02-26 10:00:40:575 [ info nextcloud.sync.networkjob C:\Nextcloud\desktop\src\libsync\abstractnetworkjob.cpp:382 ]: OCC::LsColJob created for "https://nextcloud.local" + "testdir" ""
2026-02-26 10:00:40:578 [ info nextcloud.sync.account C:\Nextcloud\desktop\src\libsync\account.cpp:1292 ]: ls col job started
2026-02-26 10:00:40:581 [ info nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:585 ]: ls prop started
2026-02-26 10:00:40:802 [ info nextcloud.sync.credentials.webflow C:\Nextcloud\desktop\src\gui\creds\webflowcredentials.cpp:411 ]: request finished QUrl("https://nextcloud.local/remote.php/dav/files/Testuser/testdir") with request id "5a3d969d-b2a2-40c3-b405-7e4e3debe819"
2026-02-26 10:00:40:814 [ info nextcloud.sync.networkjob.lscol C:\Nextcloud\desktop\src\libsync\networkjobs.cpp:537 ]: LSCOL of QUrl("https://nextcloud.local/remote.php/dav/files/Testuser/testdir") FINISHED WITH STATUS "OK"
2026-02-26 10:00:40:819 [ debug nextcloud.sync.account C:\Nextcloud\desktop\src\libsync\account.cpp:1264 ] [ OCC::Account::listRemoteFolder::::operator() ]: skip first item
2026-02-26 10:00:40:828 [ info nextcloud.sync.account C:\Nextcloud\desktop\src\libsync\account.cpp:1269 ]: ls col job "testdir" new file "/remote.php/dav/files/Testuser/testdir/13:37.md" 13
2026-02-26 10:00:40:831 [ info nextcloud.sync.account C:\Nextcloud\desktop\src\libsync\account.cpp:1251 ]: ls col job "testdir" finished
2026-02-26 10:00:40:837 [ info nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:578 ]: ls prop result at index 0
2026-02-26 10:00:40:839 [ info nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:572 ]: ls prop finished
2026-02-26 10:00:40:840 [ info nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:594 ]: ls prop finished "C:\\Users\\jyrki\\New folder (3)\\testdir" "testdir" discovered new entries: 1
2026-02-26 10:00:40:841 [ info nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:151 ]: "13:37.md" fileId: "00086609oc57r1w59nxx" fileSize: 0 fileMtime: 1772105998 fileResourceType: file
2026-02-26 10:00:40:846 [ critical nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:200 ]: Couldn't send transfer info "1dca6f14bcbe8d6" : -2147024516 "The cloud operation is invalid."
2026-02-26 10:00:40:855 [ info nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:203 ]: number of processes entries: 1
2026-02-26 10:00:40:863 [ critical nextcloud.sync.csync.vio_local C:\Nextcloud\desktop\src\csync\vio\csync_vio_local_win.cpp:202 ]: CreateFileW failed on "C:/Users/jyrki/New folder (3)/testdir/13:37.md" "WindowsError: 2: The system cannot find the file specified."
2026-02-26 10:00:40:868 [ warning nextcloud.sync.vfs.cfapi C:\Nextcloud\desktop\src\libsync\vfs\cfapi\vfs_cfapi.cpp:572 ]: Impossible to query inode for file "testdir/13:37.md"
2026-02-26 10:00:40:869 [ info nextcloud.sync.database C:\Nextcloud\desktop\src\common\syncjournaldb.cpp:1039 ]: Updating file record for path: "testdir/13:37.md" inode: 0 modtime: 1772105998 type: CSyncEnums::ItemTypeVirtualFile etag: "69a03110d1985" fileId: "00086609oc57r1w59nxx" remotePerm: "GWDNVR" fileSize: 0 checksum: "" e2eMangledName: "" isE2eEncrypted: false lock: false lock owner type: 0 lock owner: "" lock owner id: "" lock editor: "" sharedByMe: false isShared: false lastShareStateFetchedTimestamp: 1772096440862 isLivePhoto false livePhotoFile "" folderQuota - bytesUsed: -1 bytesAvailable: -1
2026-02-26 10:00:40:872 [ info nextcloud.sync.database C:\Nextcloud\desktop\src\common\syncjournaldb.cpp:1039 ]: Updating file record for path: "testdir" inode: 67323 modtime: 1772105998 type: CSyncEnums::ItemTypeDirectory etag: "69a03110d4813" fileId: "00086608oc57r1w59nxx" remotePerm: "GDNVCKR" fileSize: 0 checksum: "" e2eMangledName: "" isE2eEncrypted: false lock: false lock owner type: 0 lock owner: "" lock owner id: "" lock editor: "" sharedByMe: false isShared: false lastShareStateFetchedTimestamp: 1772096419519 isLivePhoto false livePhotoFile "" folderQuota - bytesUsed: 0 bytesAvailable: -3
2026-02-26 10:00:40:873 [ info nextcloud.sync.vfs.cfapi C:\Nextcloud\desktop\src\libsync\vfs\cfapi\vfs_cfapi.cpp:596 ]: update folder on-demand DB record succeeded "testdir"
2026-02-26 10:00:40:874 [ info nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:607 ]: call for finalizeNewPlaceholders was done
2026-02-26 10:00:40:874 [ info nextcloud.sync.vfs.cfapi.wrapper C:\Nextcloud\desktop\src\libsync\vfs\cfapi\cfapiwrapper.cpp:612 ]: call for finalizeNewPlaceholders succeeded
```

Further attempts at accessing the directory don't appear to do anything at all -- no logs for that.

Discovered this by accident when testing 33.0.0-rc1, although I had such a file inside the root directory.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.