Skip to content

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

@nilsding

Description

@nilsding

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

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?

  • Default internal user-backend
  • LDAP/ Active Directory
  • SSO - SAML
  • Other

Nextcloud Server logs

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No fields configured for Bug.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions