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

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions