First character of each new line in note is typed twice
Describe the bug Every new line, not just the first, has the first character duplicated. For example: "Hello" appears as "HHello". "B" appears as "BB". The extra character appears as soon as the live change syncs, a fraction of a second after the first character is typed. The issue does not repeat until starting another new line.
To Reproduce Steps to reproduce the behavior:
- Create a new .md note
- start a new line
- type 1 character of your choice
- note the character gets entered twice, the duplicate must be deleted
- Sometimes the first character gets duplicated at the time the second character is typed but it is always the first letter or character
Expected behavior What you type gets entered a single time per key press.
Screenshots Video: https://nc.j64.uk/s/AWHRrFrr7t76dSa
Server details:
- Nextcloud version: 31.0.10
- PHP Version: 8.3.26
- Database: pgsql PostgreSQL 17.6 on x86_64-pc-linux-musl, compiled by gcc (Alpine 14.2.0) 14.2.0, 64-bit
Client details:
- OS: Android
- Browser: Native app
- Browser version: N/A
- Device: Google Pixel 8
Logs
Nextcloud log (data/nextcloud.log)
\\Controller\\DirectEditingController","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/lib/private/AppFramework/Http/Dispatcher.php","line":114,"function":"executeController","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\Files\\Controller\\DirectEditingController"},"create"]},{"file":"/var/www/html/lib/private/AppFramework/App.php","line":161,"function":"dispatch","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\Files\\Controller\\DirectEditingController"},"create"]},{"file":"/var/www/html/lib/private/Route/Router.php","line":315,"function":"main","class":"OC\\AppFramework\\App","type":"::","args":["OCA\\Files\\Controller\\DirectEditingController","create",{"__class__":"OC\\AppFramework\\DependencyInjection\\DIContainer"},{"_route":"ocs.files.directediting.create"}]},{"file":"/var/www/html/ocs/v1.php","line":49,"function":"match","class":"OC\\Route\\Router","type":"->","args":["/ocsapp/apps/files/api/v1/directEditing/create"]},{"file":"/var/www/html/ocs/v2.php","line":7,"args":["/var/www/html/ocs/v1.php"],"function":"require_once"}],"File":"/var/www/html/lib/private/DirectEditing/Manager.php","Line":100,"message":"Exception when creating a new file through direct editing","exception":{},"CustomMessage":"Exception when creating a new file through direct editing"}}
{"reqId":"XaH0ZJcp38hjtYuAVn3i","level":2,"time":"2025-11-15T15:37:08+00:00","remoteAddr":"172.23.0.1","user":"admin","app":"core","method":"POST","url":"/login/challenge/totp","message":"Two-factor challenge failed: admin (Remote IP: 172.23.0.1)","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36","version":"31.0.10.2","data":{"app":"core"}}
{"reqId":"mA164x13WplePDfWxcRb","level":3,"time":"2025-11-15T15:50:55+00:00","remoteAddr":"172.23.0.1","user":"--","app":"no app in context","method":"PROPFIND","url":"/public.php/dav/files/admin","message":"Exception thrown: Sabre\\DAV\\Exception\\NotFound","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36","version":"31.0.10.2","exception":{"Exception":"Sabre\\DAV\\Exception\\NotFound","Message":"","Code":0,"Trace":[{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/PublicAuth.php","line":80,"function":"checkToken","class":"OCA\\DAV\\Connector\\Sabre\\PublicAuth","type":"->","args":[]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Auth/Plugin.php","line":179,"function":"check","class":"OCA\\DAV\\Connector\\Sabre\\PublicAuth","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Auth/Plugin.php","line":135,"function":"check","class":"Sabre\\DAV\\Auth\\Plugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"beforeMethod","class":"Sabre\\DAV\\Auth\\Plugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":456,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["beforeMethod:PROPFIND",[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Server.php","line":49,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/apps/dav/appinfo/v2/publicremote.php","line":153,"function":"start","class":"OCA\\DAV\\Connector\\Sabre\\Server","type":"->","args":[]},{"file":"/var/www/html/public.php","line":82,"args":["/var/www/html/apps/dav/appinfo/v2/publicremote.php"],"function":"require_once"}],"File":"/var/www/html/apps/dav/lib/Connector/Sabre/PublicAuth.php","Line":130,"message":"","exception":{},"CustomMessage":"Exception thrown: Sabre\\DAV\\Exception\\NotFound"}}
{"reqId":"mA164x13WplePDfWxcRb","level":3,"time":"2025-11-15T15:50:55+00:00","remoteAddr":"172.23.0.1","user":"--","app":"webdav","method":"PROPFIND","url":"/public.php/dav/files/admin","message":"Sabre\\DAV\\Exception\\NotFound: ","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36","version":"31.0.10.2","exception":{"Exception":"Sabre\\DAV\\Exception\\ServiceUnavailable","Message":"Sabre\\DAV\\Exception\\NotFound: ","Code":0,"Trace":[{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Auth/Plugin.php","line":179,"function":"check","class":"OCA\\DAV\\Connector\\Sabre\\PublicAuth","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Auth/Plugin.php","line":135,"function":"check","class":"Sabre\\DAV\\Auth\\Plugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"beforeMethod","class":"Sabre\\DAV\\Auth\\Plugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":456,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["beforeMethod:PROPFIND",[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Server.php","line":49,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/apps/dav/appinfo/v2/publicremote.php","line":153,"function":"start","class":"OCA\\DAV\\Connector\\Sabre\\Server","type":"->","args":[]},{"file":"/var/www/html/public.php","line":82,"args":["/var/www/html/apps/dav/appinfo/v2/publicremote.php"],"function":"require_once"}],"File":"/var/www/html/apps/dav/lib/Connector/Sabre/PublicAuth.php","Line":96,"message":"Sabre\\DAV\\Exception\\NotFound: ","exception":{},"CustomMessage":"Sabre\\DAV\\Exception\\NotFound: "}}
{"reqId":"ylJVi4AJ1M3lC3BNYZBZ","level":3,"time":"2025-11-15T15:53:48+00:00","remoteAddr":"172.23.0.1","user":"--","app":"no app in context","method":"PROPFIND","url":"/public.php/dav/files/admin","message":"Exception thrown: Sabre\\DAV\\Exception\\NotFound","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36","version":"31.0.10.2","exception":{"Exception":"Sabre\\DAV\\Exception\\NotFound","Message":"","Code":0,"Trace":[{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/PublicAuth.php","line":80,"function":"checkToken","class":"OCA\\DAV\\Connector\\Sabre\\PublicAuth","type":"->","args":[]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Auth/Plugin.php","line":179,"function":"check","class":"OCA\\DAV\\Connector\\Sabre\\PublicAuth","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Auth/Plugin.php","line":135,"function":"check","class":"Sabre\\DAV\\Auth\\Plugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"beforeMethod","class":"Sabre\\DAV\\Auth\\Plugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":456,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["beforeMethod:PROPFIND",[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Server.php","line":49,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/apps/dav/appinfo/v2/publicremote.php","line":153,"function":"start","class":"OCA\\DAV\\Connector\\Sabre\\Server","type":"->","args":[]},{"file":"/var/www/html/public.php","line":82,"args":["/var/www/html/apps/dav/appinfo/v2/publicremote.php"],"function":"require_once"}],"File":"/var/www/html/apps/dav/lib/Connector/Sabre/PublicAuth.php","Line":130,"message":"","exception":{},"CustomMessage":"Exception thrown: Sabre\\DAV\\Exception\\NotFound"}}
{"reqId":"ylJVi4AJ1M3lC3BNYZBZ","level":3,"time":"2025-11-15T15:53:48+00:00","remoteAddr":"172.23.0.1","user":"--","app":"webdav","method":"PROPFIND","url":"/public.php/dav/files/admin","message":"Sabre\\DAV\\Exception\\NotFound: ","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36","version":"31.0.10.2","exception":{"Exception":"Sabre\\DAV\\Exception\\ServiceUnavailable","Message":"Sabre\\DAV\\Exception\\NotFound: ","Code":0,"Trace":[{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Auth/Plugin.php","line":179,"function":"check","class":"OCA\\DAV\\Connector\\Sabre\\PublicAuth","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Auth/Plugin.php","line":135,"function":"check","class":"Sabre\\DAV\\Auth\\Plugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"beforeMethod","class":"Sabre\\DAV\\Auth\\Plugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":456,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["beforeMethod:PROPFIND",[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Server.php","line":49,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/apps/dav/appinfo/v2/publicremote.php","line":153,"function":"start","class":"OCA\\DAV\\Connector\\Sabre\\Server","type":"->","args":[]},{"file":"/var/www/html/public.php","line":82,"args":["/var/www/html/apps/dav/appinfo/v2/publicremote.php"],"function":"require_once"}],"File":"/var/www/html/apps/dav/lib/Connector/Sabre/PublicAuth.php","Line":96,"message":"Sabre\\DAV\\Exception\\NotFound: ","exception":{},"CustomMessage":"Sabre\\DAV\\Exception\\NotFound: "}}
Browser log
Not an issue in browser (In browser backspace does not delete a line though, line-breaks cannot be deleted, unknown if this is related)
This is bug is not reproduced with text files, only MD files
@jpurdy647 I was not able to reproduce on Nextcloud 31.0.12 with latest Android app. I'm confident that it got fixed with #7981. Can you please check whether the issue is fixed after upgrading to Nextcloud 31.0.12 (or 32.0.3)? Please report back if you continue to encounter it after upgrading.
Looks like 32.0.2 is the latest AIO Docker, that is the current version I am running, I was not able to see an easy way to upgrade beyond that release, updates are currently automatic also. Android app version is 3.34.1, I do still have the issue with the app, confirmed just now with a new .md text file
@jpurdy647 I guess you'll have to wait a few more days before AIO upgrades to 32.0.3, which just got released last Thursday.
@jpurdy647 I guess you'll have to wait a few more days before AIO upgrades to 32.0.3, which just got released last Thursday.
Sounds good, I'll report back then, thanks for looking into it!