nextcloud / nextcloud/deck

Experiencing problems linking, when non-latin characters are used in card titles and exceed certain length

Open
#2,780 4 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug feature: cards feature: projects translation
Dominant language
JavaScript
Stars
1.4k
Forks
354
Avg merge
1d 10h
Merged PRs (30d)
43

Description

Note: This issue might also apply to deck titles, and could as well be a general problem of nextcloud. I have not checked it yet, but I guess it will show, if the problem lies deeper in some common API

Steps to reproduce

Create a card with a title "αβγδεζηθικλμνξοπρστυφχψωαβγδεζηθι" (That is 34 greek characters)
try to link this card to anything, a deck, a card, a file, or a conversation. It will fail.

For reference, if you remove the last character, making the length 33, linking to the other objects works as expected.

Note:
It looks like there might be an encoding issue here, as for example url encoded characters like these, would eat up 99 characters in the case of a 33 character string of non-latin characters and 102 in the case of 34 non-latin characters. This might be a combination of problems - the first being the characters being counted wrong due to encoding issues, and the second being an imposed limit of 100 characters, which, i think, was the hard limit for titles in the past.

Expected behaviour

Link should complete

Actual behaviour

Link fails responding with "Failed to create a project" in the UI. See browser log below for related network info.

Server configuration detail

Operating system: Linux 5.4.0-65-generic 73-Ubuntu SMP Mon Jan 18 17:25:17 UTC 2021 x86_64

Webserver: Apache/2.4.38 (Debian) (apache2handler)

Database: mysql 10.5.8

PHP version:

7.4.14
Modules loaded: Core, date, libxml, openssl, pcre, sqlite3, zlib, ctype, curl, dom, fileinfo, filter, ftp, hash, iconv, json, mbstring, SPL, PDO, session, posix, Reflection, standard, SimpleXML, pdo_sqlite, Phar, tokenizer, xml, xmlreader, xmlwriter, mysqlnd, apache2handler, apcu, bcmath, exif, gd, gmp, imagick, intl, ldap, memcached, pcntl, pdo_mysql, pdo_pgsql, redis, sodium, zip, Zend OPcache

Nextcloud version: 20.0.6 - 20.0.6.1

Updated from an older Nextcloud/ownCloud or fresh install:

Where did you install Nextcloud from: unknown

Signing status

Array
(
)

List of activated apps
Enabled:
 - accessibility: 1.6.0
 - activity: 2.13.4
 - announcementcenter: 4.0.1
 - appointments: 1.8.1
 - apporder: 0.11.0
 - breezedark: 20.0.3
 - bruteforcesettings: 2.0.1
 - calendar: 2.1.3
 - circles: 0.20.6
 - cloud_federation_api: 1.3.0
 - comments: 1.10.0
 - contacts: 3.4.3
 - contactsinteraction: 1.1.0
 - dashboard: 7.0.0
 - dav: 1.16.2
 - deck: 1.2.4
 - epubreader: 1.4.5
 - event_update_notification: 1.2.0
 - external: 3.7.2
 - federatedfilesharing: 1.10.2
 - federation: 1.10.1
 - files: 1.15.0
 - files_automatedtagging: 1.10.1
 - files_markdown: 2.3.1
 - files_mindmap: 0.0.24
 - files_pdfviewer: 2.0.1
 - files_retention: 1.9.0
 - files_rightclick: 0.17.0
 - files_sharing: 1.12.2
 - files_texteditor: 2.14.0
 - files_trashbin: 1.10.1
 - files_versions: 1.13.0
 - files_videoplayer: 1.9.0
 - firstrunwizard: 2.9.0
 - flow_notifications: 1.0.3
 - flowupload: 1.1.2
 - forms: 2.1.0
 - groupfolders: 8.2.0
 - impersonate: 1.7.0
 - issuetemplate: 0.7.0
 - logreader: 2.5.0
 - lookup_server_connector: 1.8.0
 - nextcloud_announcements: 1.9.0
 - notes: 3.5.1
 - notifications: 2.8.0
 - oauth2: 1.8.0
 - password_policy: 1.10.1
 - pdfdraw: 0.1.2
 - photos: 1.2.3
 - polls: 1.7.5
 - privacy: 1.4.0
 - provisioning_api: 1.10.0
 - quicknotes: 0.6.3
 - quota_warning: 1.9.1
 - recommendations: 0.8.0
 - richdocuments: 3.7.14
 - richdocumentscode: 6.4.403
 - serverinfo: 1.10.0
 - settings: 1.2.0
 - sharebymail: 1.10.0
 - side_menu: 1.22.0
 - socialsharing_email: 2.1.0
 - socialsharing_facebook: 2.1.0
 - socialsharing_twitter: 2.1.0
 - spreed: 10.0.5
 - support: 1.3.0
 - survey_client: 1.8.0
 - systemtags: 1.10.0
 - talk_simple_poll: 1.2.0
 - tasks: 0.13.6
 - theming: 1.11.0
 - twofactor_backupcodes: 1.9.0
 - updatenotification: 1.10.0
 - user_saml: 3.3.4
 - user_status: 1.0.1
 - viewer: 1.4.0
 - weather_status: 1.0.0
 - whiteboard: 0.0.3
 - workflowengine: 2.2.0
Disabled:
 - admin_audit
 - encryption
 - files_external
 - hsts
 - registration
 - text
 - twofactor_email
 - twofactor_nextcloud_notification
 - user_ldap
 - workflow_script

Configuration (config/config.php)
{
    "htaccess.RewriteBase": "\/",
    "memcache.local": "\\OC\\Memcache\\APCu",
    "apps_paths": [
        {
            "path": "\/var\/www\/html\/apps",
            "url": "\/apps",
            "writable": false
        },
        {
            "path": "\/var\/www\/html\/custom_apps",
            "url": "\/custom_apps",
            "writable": true
        }
    ],
    "instanceid": "***REMOVED SENSITIVE VALUE***",
    "passwordsalt": "***REMOVED SENSITIVE VALUE***",
    "secret": "***REMOVED SENSITIVE VALUE***",
    "trusted_domains": [
        "kgtz-nextcloud.frankmayer.net"
    ],
    "datadirectory": "***REMOVED SENSITIVE VALUE***",
    "dbtype": "mysql",
    "version": "20.0.6.1",
    "overwrite.cli.url": "http:\/\/kgtz-nextcloud.frankmayer.net",
    "dbname": "***REMOVED SENSITIVE VALUE***",
    "dbhost": "***REMOVED SENSITIVE VALUE***",
    "dbport": "",
    "dbtableprefix": "oc_",
    "mysql.utf8mb4": true,
    "dbuser": "***REMOVED SENSITIVE VALUE***",
    "dbpassword": "***REMOVED SENSITIVE VALUE***",
    "installed": true,
    "overwriteprotocol": "https",
    "mail_smtpmode": "smtp",
    "mail_smtpsecure": "tls",
    "mail_sendmailmode": "smtp",
    "mail_from_address": "***REMOVED SENSITIVE VALUE***",
    "mail_smtpauthtype": "LOGIN",
    "mail_smtpauth": 1,
    "mail_smtphost": "***REMOVED SENSITIVE VALUE***",
    "mail_smtpport": "25",
    "mail_smtpname": "***REMOVED SENSITIVE VALUE***",
    "mail_smtppassword": "***REMOVED SENSITIVE VALUE***",
    "mail_domain": "***REMOVED SENSITIVE VALUE***",
    "maintenance": false,
    "app_install_overwrite": [
        "joplin",
        "documents"
    ],
    "updater.secret": "***REMOVED SENSITIVE VALUE***"
}

Are you using external storage, if yes which one: local/smb/sftp/...

Are you using encryption:

Are you using an external user-backend, if yes which one: LDAP/ActiveDirectory/Webdav/...

Client configuration

Browser: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0

Operating system:

Logs

Web server error log
Insert your web server log here 
Nextcloud log
Insert your Nextcloud log here
Browser log

When linking succeeds, there are 2 consecutive successful calls to the server.
in my case:
Request URL: https://ADDRESS__/ocs/v2.php/collaboration/resources/deck-card/50?format=json
Request Method: POST
Status Code: 200
Referrer Policy: no-referrer
cache-control: no-cache, no-store, must-revalidate
content-encoding: gzip
content-length: 291
content-security-policy: default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none'
content-type: application/json; charset=utf-8

with payload: {name: "αβγδεζηθικλμνξοπρστυφχψωαβγδεζηθ"}

Response

{"ocs":{"meta":{"status":"ok","statuscode":200,"message":"OK"},"data":{"id":45,"name":"\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8","resources":[{"type":"deck-card","id":"50","name":"IT (\u039c\u03b7\u03c7\u03b1\u03bd\u03bf\u03c1\u03b3\u03ac\u03bd\u03c9\u03c3\u03b7): \u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8","link":"/apps/deck/#/board/26/card/50","iconUrl":"/core/img/actions/toggle-pictures.svg"}]}}}

and

Request URL: https://ADDRESS__/ocs/v2.php/collaboration/resources/collections/45?format=json
Request Method: POST
Status Code: 200
Referrer Policy: no-referrer
cache-control: no-cache, no-store, must-revalidate
content-encoding: gzip
content-length: 334
content-security-policy: default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none'
content-type: application/json; charset=utf-8

with payload: "{resourceType: "deck-card", resourceId: "46"}"

and response:
{"ocs":{"meta":{"status":"ok","statuscode":200,"message":"OK"},"data":{"id":45,"name":"\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8","resources":[{"type":"deck-card","id":"50","name":"IT (\u039c\u03b7\u03c7\u03b1\u03bd\u03bf\u03c1\u03b3\u03ac\u03bd\u03c9\u03c3\u03b7): \u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8","link":"/apps/deck/#/board/26/card/50","iconUrl":"/core/img/actions/toggle-pictures.svg"},{"type":"deck-card","id":"46","name":"\u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b9\u03ba\u03ac: test file link","link":"/apps/deck/#/board/8/card/46","iconUrl":"/core/img/actions/toggle-pictures.svg"}]}}}

When it fails, there is only the first request which gets executed and receives a 400 error
Request URL: https://ADDRESS__/ocs/v2.php/collaboration/resources/deck-card/50?format=json
Request Method: POST
Status Code: 400
Referrer Policy: no-referrer
cache-control: no-cache, no-store, must-revalidate
content-length: 79
content-security-policy: default-src 'none';base-uri 'none';manifest-src 'self';frame-ancestors 'none'
content-type: application/json; charset=utf-8

with payload: "{name: "αβγδεζηθικλμνξοπρστυφχψωαβγδεζηθι"}"

and response: "{"ocs":{"meta":{"status":"failure","statuscode":400,"message":null},"data":[]}}"

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

No source file or test is named. Start by reproducing the 33- and 34-character Greek-title cases against the deck-card resource endpoint, then trace the 400 response and title-length or encoding handling. Done means linking succeeds for the reported non-Latin title cases, with regression coverage for both lengths.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.