owncloud / owncloud/core

Error reading a folder with percent character (%) in the name; 400 Bad Request

Open
#41,436 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
PHP
Stars
8.8k
Forks
2.1k
Avg merge
20h 7m
Merged PRs (30d)
41

Description

An existing folder in Owncloud with the % character in the name makes trouble on new users, if they want to sync this folder. Error message from Owncloud Desktop Client 6.0.2 (translated from german):

The server reports an error reading the folder. […] The server responded with "400 Bad Request" to […]

Image
Steps to reproduce
  1. Install owncloud/server:10.15.3 via Docker
  2. create a folder with % character in the name (like "15% taxes")
  3. Upgrade to owncloud/server:10.16.0 via Docker
  4. share folder with an active directory user in owncloud
  5. install Owncloud Desktop Client in version 5.x or 6.x
  6. login via the Owncloud Desktop Client with this active directory user
  7. read the error message after failed synchronization
Expected behaviour

No problems with synchronization of folders with a % character

Actual behaviour

synchronization abort with error message

Server configuration

Operating system: Ubuntu 24.04 (host) + Docker container

Web server: Default from Docker container

Database: MySQL 8.4.7

PHP version: Default from Docker container

ownCloud version: 10.16.0

Updated from an older ownCloud or fresh install: Updated from 10.15.3

Where did you install ownCloud from: from Docker Hub via Ansible + Docker
Signing status (ownCloud 9.0 and above): I don't know

Login as admin user into your ownCloud and access 
http://example.com/index.php/settings/integrity/failed 
paste the results into https://gist.github.com/ and puth the link here.

"No errors have been found."

The content of config/config.php: still too much sensitive data in the created report (like account names, domains etc.)

List of activated apps:

Enabled:
  - brute_force_protection:
    - Version: 1.3.0
    - Path: /var/www/owncloud/custom/brute_force_protection
  - comments:
    - Version: 0.3.0
    - Path: /var/www/owncloud/apps/comments
  - configreport:
    - Version: 0.3.1
    - Path: /var/www/owncloud/apps/configreport
  - dav:
    - Version: 0.7.0
    - Path: /var/www/owncloud/apps/dav
  - diagnostics:
    - Version: 0.2.1
    - Path: /var/www/owncloud/apps/diagnostics
  - external:
    - Version: 1.4.0
    - Path: /var/www/owncloud/apps/external
  - federatedfilesharing:
    - Version: 0.5.0
    - Path: /var/www/owncloud/apps/federatedfilesharing
  - federation:
    - Version: 0.1.0
    - Path: /var/www/owncloud/apps/federation
  - files:
    - Version: 1.6.0
    - Path: /var/www/owncloud/apps/files
  - files_antivirus:
    - Version: 1.2.3
    - Path: /var/www/owncloud/apps/files_antivirus
  - files_external:
    - Version: 0.9.0
    - Path: /var/www/owncloud/apps/files_external
  - files_mediaviewer:
    - Version: 1.0.5
    - Path: /var/www/owncloud/apps/files_mediaviewer
  - files_pdfviewer:
    - Version: 1.0.2
    - Path: /var/www/owncloud/apps/files_pdfviewer
  - files_sharing:
    - Version: 0.14.0
    - Path: /var/www/owncloud/apps/files_sharing
  - files_texteditor:
    - Version: 2.6.2
    - Path: /var/www/owncloud/apps/files_texteditor
  - files_trashbin:
    - Version: 0.9.1
    - Path: /var/www/owncloud/apps/files_trashbin
  - files_versions:
    - Version: 1.3.0
    - Path: /var/www/owncloud/apps/files_versions
  - firstrunwizard:
    - Version: 1.3.0
    - Path: /var/www/owncloud/apps/firstrunwizard
  - gallery:
    - Version: 16.1.2
    - Path: /var/www/owncloud/custom/gallery
  - market:
    - Version: 0.9.0
    - Path: /var/www/owncloud/apps/market
  - notifications:
    - Version: 0.6.0
    - Path: /var/www/owncloud/apps/notifications
  - provisioning_api:
    - Version: 0.5.0
    - Path: /var/www/owncloud/apps/provisioning_api
  - systemtags:
    - Version: 0.3.0
    - Path: /var/www/owncloud/apps/systemtags
  - user_external:
    - Version: 0.6.0
    - Path: /var/www/owncloud/apps/user_external
  - user_ldap:
    - Version: 0.19.1
    - Path: /var/www/owncloud/apps/user_ldap
Disabled:
  - activity:
    - Path: /var/www/owncloud/apps/activity
  - admin_audit:
    - Path: /var/www/owncloud/apps/admin_audit
  - announcementcenter:
    - Path: /var/www/owncloud/apps/announcementcenter
  - customgroups:
    - Path: /var/www/owncloud/apps/customgroups
  - drawio:
    - Path: /var/www/owncloud/apps/drawio
  - encryption:
    - Path: /var/www/owncloud/apps/encryption
  - files_classifier:
    - Path: /var/www/owncloud/apps/files_classifier
  - files_external_dropbox:
    - Path: /var/www/owncloud/apps/files_external_dropbox
  - files_external_ftp:
    - Path: /var/www/owncloud/apps/files_external_ftp
  - files_ldap_home:
    - Path: /var/www/owncloud/apps/files_ldap_home
  - files_lifecycle:
    - Path: /var/www/owncloud/apps/files_lifecycle
  - files_primary_s3:
    - Path: /var/www/owncloud/apps/files_primary_s3
  - firewall:
    - Path: /var/www/owncloud/apps/firewall
  - graphapi:
    - Path: /var/www/owncloud/apps/graphapi
  - guests:
    - Path: /var/www/owncloud/apps/guests
  - impersonate:
    - Path: /var/www/owncloud/apps/impersonate
  - kerberos:
    - Path: /var/www/owncloud/apps/kerberos
  - metrics:
    - Path: /var/www/owncloud/apps/metrics
  - oauth2:
    - Path: /var/www/owncloud/apps/oauth2
  - openidconnect:
    - Path: /var/www/owncloud/apps/openidconnect
  - password_policy:
    - Path: /var/www/owncloud/apps/password_policy
  - ransomware_protection:
    - Path: /var/www/owncloud/apps/ransomware_protection
  - sharepoint:
    - Path: /var/www/owncloud/apps/sharepoint
  - systemtags_management:
    - Path: /var/www/owncloud/apps/systemtags_management
  - templateeditor:
    - Path: /var/www/owncloud/apps/templateeditor
  - theme-enterprise:
    - Path: /var/www/owncloud/apps/theme-enterprise
  - updatenotification:
    - Path: /var/www/owncloud/apps/updatenotification
  - user_shibboleth:
    - Path: /var/www/owncloud/apps/user_shibboleth
  - web:
    - Path: /var/www/owncloud/apps/web
  - windows_network_drive:
    - Path: /var/www/owncloud/apps/windows_network_drive
  - wopi:
    - Path: /var/www/owncloud/apps/wopi
  - workflow:
    - Path: /var/www/owncloud/apps/workflow

Are you using external storage, if yes which one: no

Are you using encryption: no

Are you using an external user-backend, if yes which one: ActiveDirectory

LDAP configuration (delete this part if not used)
+-------------------------------+--------------------------------------------------------------------------------------------------------------+
| Configuration                 | s01                                                                                                          |
+-------------------------------+--------------------------------------------------------------------------------------------------------------+
| hasMemberOfFilterSupport      | 1                                                                                                            |
| hasPagedResultSupport         |                                                                                                              |
| homeFolderNamingRule          |                                                                                                              |
| lastJpegPhotoLookup           | 0                                                                                                            |
| ldapAgentName                 | CN=***REMOVED***,CN=Users,DC=***REMOVED***,DC=***REMOVED***                                                        |
| ldapAgentPassword             | ***                                                                                                          |
| ldapAttributesForGroupSearch  |                                                                                                              |
| ldapAttributesForUserSearch   |                                                                                                              |
| ldapBackupHost                | ***REMOVED***                                                                                                       |
| ldapBackupPort                | 389                                                                                                          |
| ldapBase                      | DC=***REMOVED***,DC=***REMOVED***                                                                                    |
| ldapBaseGroups                | CN=Users,DC=***REMOVED***,DC=***REMOVED***                                                                           |
| ldapBaseUsers                 | CN=Users,DC=***REMOVED***,DC=***REMOVED***                                                                           |
| ldapCacheTTL                  | 600                                                                                                          |
| ldapConfigurationActive       | 1                                                                                                            |
| ldapDynamicGroupMemberURL     |                                                                                                              |
| ldapEmailAttribute            | mail                                                                                                         |
| ldapExperiencedAdmin          | 0                                                                                                            |
| ldapExpertGroupnameAttr       | cn                                                                                                           |
| ldapExpertUUIDGroupAttr       |                                                                                                              |
| ldapExpertUUIDUserAttr        | objectguid                                                                                                   |
| ldapExpertUsernameAttr        | sAMAccountname                                                                                               |
| ldapExposedAttributesForUser  |                                                                                                              |
| ldapGroupDisplayName          | cn                                                                                                           |
| ldapGroupFilter               | (&(objectClass=group)(CN=****REMOVED****))                                                                        |
| ldapGroupFilterGroups         |                                                                                                              |
| ldapGroupFilterMode           | 0                                                                                                            |
| ldapGroupFilterObjectclass    |                                                                                                              |
| ldapGroupMemberAlgo           | groupScan                                                                                                    |
| ldapGroupMemberAssocAttr      | member                                                                                                       |
| ldapHost                      | ***REMOVED***                                                                                                       |
| ldapIgnoreNamingRules         |                                                                                                              |
| ldapLoginFilter               | (&(&(|(objectclass=user))(|(memberof=CN=***REMOVED***,CN=***REMOVED***,DC=***REMOVED***,DC=***REMOVED***)))(samaccountname=%uid)) |
| ldapLoginFilterAttributes     |                                                                                                              |
| ldapLoginFilterEmail          | 0                                                                                                            |
| ldapLoginFilterMode           | 1                                                                                                            |
| ldapLoginFilterUsername       | 1                                                                                                            |
| ldapNestedGroups              | 0                                                                                                            |
| ldapNetworkTimeout            | 2                                                                                                            |
| ldapOverrideMainServer        |                                                                                                              |
| ldapPagingSize                | 500                                                                                                          |
| ldapPort                      | 389                                                                                                          |
| ldapQuotaAttribute            |                                                                                                              |
| ldapQuotaDefault              |                                                                                                              |
| ldapTLS                       | 0                                                                                                            |
| ldapUserDisplayName           | cn                                                                                                           |
| ldapUserDisplayName2          |                                                                                                              |
| ldapUserFilter                | (&(|(objectclass=user))(|(memberof=CN=***REMOVED***,CN=***REMOVED***,DC=***REMOVED***,DC=***REMOVED***)))                         |
| ldapUserFilterGroups          | ***REMOVED***                                                                                                     |
| ldapUserFilterMode            | 1                                                                                                            |
| ldapUserFilterObjectclass     | user                                                                                                         |
| ldapUserName                  | samaccountname                                                                                               |
| ldapUuidGroupAttribute        | auto                                                                                                         |
| ldapUuidUserAttribute         | auto                                                                                                         |
| turnOffCertCheck              |                                                                                                              |
| useMemberOfToDetectMembership | 1                                                                                                            |
+-------------------------------+--------------------------------------------------------------------------------------------------------------+
+-------------------------------+--------------------------------------------------------------------------------------------------------------+
| Configuration                 | s02                                                                                                          |
+-------------------------------+--------------------------------------------------------------------------------------------------------------+
| hasMemberOfFilterSupport      | 1                                                                                                            |
| hasPagedResultSupport         |                                                                                                              |
| homeFolderNamingRule          |                                                                                                              |
| lastJpegPhotoLookup           | 0                                                                                                            |
| ldapAgentName                 | CN=***REMOVED***,CN=***REMOVED***,DC=***REMOVED***,DC=***REMOVED***                                                      |
| ldapAgentPassword             | ***                                                                                                          |
| ldapAttributesForGroupSearch  |                                                                                                              |
| ldapAttributesForUserSearch   |                                                                                                              |
| ldapBackupHost                |                                                                                                              |
| ldapBackupPort                |                                                                                                              |
| ldapBase                      | DC=***REMOVED***,DC=***REMOVED***                                                                                    |
| ldapBaseGroups                | DC=***REMOVED***,DC=***REMOVED***                                                                                    |
| ldapBaseUsers                 | DC=***REMOVED***,DC=***REMOVED***                                                                                    |
| ldapCacheTTL                  | 600                                                                                                          |
| ldapConfigurationActive       | 1                                                                                                            |
| ldapDynamicGroupMemberURL     |                                                                                                              |
| ldapEmailAttribute            |                                                                                                              |
| ldapExperiencedAdmin          | 0                                                                                                            |
| ldapExpertGroupnameAttr       | cn                                                                                                           |
| ldapExpertUUIDGroupAttr       |                                                                                                              |
| ldapExpertUUIDUserAttr        | objectguid                                                                                                   |
| ldapExpertUsernameAttr        |                                                                                                              |
| ldapExposedAttributesForUser  |                                                                                                              |
| ldapGroupDisplayName          | cn                                                                                                           |
| ldapGroupFilter               | (&(|(objectclass=user))(|(memberof=CN=***REMOVED***,CN=***REMOVED***,DC=***REMOVED***,DC=***REMOVED***)))                         |
| ldapGroupFilterGroups         |                                                                                                              |
| ldapGroupFilterMode           | 1                                                                                                            |
| ldapGroupFilterObjectclass    |                                                                                                              |
| ldapGroupMemberAlgo           | groupScan                                                                                                    |
| ldapGroupMemberAssocAttr      | uniqueMember                                                                                                 |
| ldapHost                      | ***REMOVED***                                                                                                       |
| ldapIgnoreNamingRules         |                                                                                                              |
| ldapLoginFilter               | (&(&(|(objectclass=user))(|(memberof=CN=***REMOVED***,CN=***REMOVED***,DC=***REMOVED***,DC=***REMOVED***)))(samaccountname=%uid)) |
| ldapLoginFilterAttributes     |                                                                                                              |
| ldapLoginFilterEmail          | 0                                                                                                            |
| ldapLoginFilterMode           | 0                                                                                                            |
| ldapLoginFilterUsername       | 1                                                                                                            |
| ldapNestedGroups              | 0                                                                                                            |
| ldapNetworkTimeout            | 2                                                                                                            |
| ldapOverrideMainServer        |                                                                                                              |
| ldapPagingSize                | 500                                                                                                          |
| ldapPort                      | 389                                                                                                          |
| ldapQuotaAttribute            |                                                                                                              |
| ldapQuotaDefault              |                                                                                                              |
| ldapTLS                       | 0                                                                                                            |
| ldapUserDisplayName           | displayName                                                                                                  |
| ldapUserDisplayName2          |                                                                                                              |
| ldapUserFilter                | (&(|(objectclass=user))(|(memberof=CN=***REMOVED***,CN=***REMOVED***,DC=***REMOVED***,DC=***REMOVED***)))                         |
| ldapUserFilterGroups          |                                                                                                              |
| ldapUserFilterMode            | 0                                                                                                            |
| ldapUserFilterObjectclass     | person                                                                                                       |
| ldapUserName                  | samaccountname                                                                                               |
| ldapUuidGroupAttribute        | auto                                                                                                         |
| ldapUuidUserAttribute         | auto                                                                                                         |
| turnOffCertCheck              | 0                                                                                                            |
| useMemberOfToDetectMembership | 1                                                                                                            |
+-------------------------------+--------------------------------------------------------------------------------------------------------------+
Client configuration

Browser: Firefox 147.0
Owncloud Desktop Client: 5.3.2 (Linux) and 6.0.2 (Windows and Linux)

Operating system: see above

Logs
ownCloud log (data/owncloud.log)
***REMOVED*** - ***REMOVED*** [14/Jan/2026:13:20:10 +0000] "PROPFIND /remote.php/dav/files/***REMOVED***/***REMOVED***%20V26 HTTP/1.1" 207 7116 "-" "Mozilla/5.0 (Windows) mirall/6.0.2.17506 (ownCloud, windows-10.0.26200 ClientArchitecture: x86_64 OsArchitecture: x86_64)"
***REMOVED*** - ***REMOVED*** [14/Jan/2026:13:20:20 +0000] "PROPFIND /remote.php/dav/files/***REMOVED***/ HTTP/1.1" 207 1174 "-" "Mozilla/5.0 (Windows) mirall/6.0.2.17506 (ownCloud, windows-10.0.26200 ClientArchitecture: x86_64 OsArchitecture: x86_64)"
***REMOVED*** - ***REMOVED*** [14/Jan/2026:13:20:20 +0000] "GET /ocs/v2.php/apps/notifications/api/v1/notifications?format=json HTTP/1.1" 200 1044 "-" "Mozilla/5.0 (Windows) mirall/6.0.2.17506 (ownCloud, windows-10.0.26200 ClientArchitecture: x86_64 OsArchitecture: x86_64)"

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure with ownCloud 10.15.3 upgraded to 10.16.0, a shared folder named “15% taxes,” and the OwnCloud Desktop Client. Start by tracing the DAV handling in the enabled apps/dav component for the folder-read request. Done means the client synchronizes shared folders containing a percent character without a 400 Bad Request.

Written by the indexing model from the issue text.

Assessment

Tech stack
php
Domain
api, backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.