keepass2android icon indicating copy to clipboard operation
keepass2android copied to clipboard

[BUG] unable to sync with remote db

Open canaz opened this issue 1 month ago • 5 comments

Checks

  • [x] I have read the FAQ section, searched the open issues, and still think this is a new bug.

Describe the bug you encountered:

Got an error while syncing with a remote database file. I am using this app since a long time, never experienced this problem until now.

Caused by: java.io.EOFException: \n not found: limit=0 content=…

Log: 02.12.2025 19:01:09:200 -- DatabaseSettingsActivity.OnPause 40 02.12.2025 19:01:09:202 -- Timeout start 02.12.2025 19:01:11:763 -- DatabaseSettingsActivity.OnResume 40 02.12.2025 19:01:11:763 -- DatabaseIsUnlocked=True 40 02.12.2025 19:01:11:764 -- Timeout cancel 02.12.2025 19:01:17:511 -- DatabaseSettingsActivity.OnPause 40 02.12.2025 19:01:17:511 -- Timeout start 02.12.2025 19:01:17:521 -- GroupActivity.OnStart 39 02.12.2025 19:01:17:522 -- GroupActivity.OnResume 39 02.12.2025 19:01:17:522 -- DatabaseIsUnlocked=True 39 02.12.2025 19:01:17:522 -- Timeout cancel 02.12.2025 19:01:17:988 -- DatabaseSettingsActivity.OnStop 40 02.12.2025 19:01:17:991 -- DatabaseSettingsActivity.OnDestroyTrue 40 02.12.2025 19:01:21:270 -- status message: Initializing... 02.12.2025 19:01:21:270 -- status submessage: 02.12.2025 19:01:21:305 -- status message: Zwischengespeicherte Datenbank synchronisieren … 02.12.2025 19:01:21:306 -- status submessage: Quelldatei wird geladen … 02.12.2025 19:01:24:133 -- Checking for file change. Current hash = B8AB3CC7EA292AFA345E1F3F2C0E0197F585DEF2624EB85AD7A97D09E92D32C6 02.12.2025 19:01:24:137 -- path/to/my/database.kdbx baseVersionHash = 8CFE7601F6A9021D6A5259DAF67A072D7CCC65B9478E4BD76CD1BE2E37AC8267 02.12.2025 19:01:24:137 -- Checking for file change. baseVersionHash = 8CFE7601F6A9021D6A5259DAF67A072D7CCC65B9478E4BD76CD1BE2E37AC8267 02.12.2025 19:01:24:138 -- path/to/my/database.kdbx isCached = True 02.12.2025 19:01:24:138 -- path/to/my/database.kdbx localVersionHash = D3C18079C842BB8E948FAE3021ACADD221832FBA45A5338A5653ED357F8E8F28 02.12.2025 19:01:24:139 -- path/to/my/database.kdbx baseVersionHash = 8CFE7601F6A9021D6A5259DAF67A072D7CCC65B9478E4BD76CD1BE2E37AC8267 02.12.2025 19:01:24:139 -- status message: Speichere Datenbank… 02.12.2025 19:01:24:139 -- Conflict. True True True 02.12.2025 19:01:25:709 -- status submessage: Führe Änderungen zusammen… 02.12.2025 19:01:25:711 -- Starting to load KDBX file... 02.12.2025 19:01:25:976 -- ReadXmlStreamed: 20ms 02.12.2025 19:01:25:978 -- Finished loading KDBX file. 02.12.2025 19:01:26:29 -- status submessage: 02.12.2025 19:01:27:163 -- Xml WriteDocument: 1054ms 02.12.2025 19:01:27:191 -- path/to/my/database.kdbx isCached = True 02.12.2025 19:01:53:612 -- unexpected end of stream on path/to/my/database/... 02.12.2025 19:01:53:615 -- couldn't save to remote path/to/my/database.kdbx 02.12.2025 19:01:53:617 -- System.Exception: unexpected end of stream on path/to/my/database/... ---> Java.IO.IOException: unexpected end of stream on path/to/my/database/... ---> Java.IO.IOException: \n not found: limit=0 content=…

--- End of managed Java.IO.IOException stack trace --- java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.kt:110) at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.kt:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:34) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at com.burgstaller.okhttp.AuthenticationCacheInterceptor.intercept(AuthenticationCacheInterceptor.java:45) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201) at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154) at keepass2android.javafilestorage.WebDavStorage.uploadFile(WebDavStorage.java:315) at keepass2android.javafilestorage.WebDavStorage.uploadFile(WebDavStorage.java:267) at mono.java.lang.RunnableImplementor.n_run(Native Method) at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29) at java.lang.Thread.run(Thread.java:1119)

--- End of managed Java.IO.IOException stack trace --- java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.kt:110) at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.kt:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:34) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at com.burgstaller.okhttp.AuthenticationCacheInterceptor.intercept(AuthenticationCacheInterceptor.java:45) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201) at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154) at keepass2android.javafilestorage.WebDavStorage.uploadFile(WebDavStorage.java:315) at keepass2android.javafilestorage.WebDavStorage.uploadFile(WebDavStorage.java:267) at mono.java.lang.RunnableImplementor.n_run(Native Method) at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29) at java.lang.Thread.run(Thread.java:1119)

Exception_EndOfInnerExceptionStack at Java.Interop.JniEnvironment.InstanceMethods.CallVoidMethod(JniObjectReference , JniMethodInfo , JniArgumentValue* ) at Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(String , IJavaPeerable , JniArgumentValue* ) at Keepass2android.Javafilestorage.WebDavStorage.UploadFile(String path, Byte[] data, Boolean writeTransactional) at keepass2android.Io.JavaFileStorage.JavaFileStorageWriteTransaction.CommitWrite() --- End of managed Java.IO.IOException stack trace --- java.io.IOException: unexpected end of stream on path/to/my/database/... at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:210) at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.kt:110) at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.kt:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:34) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at com.burgstaller.okhttp.AuthenticationCacheInterceptor.intercept(AuthenticationCacheInterceptor.java:45) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201) at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154) at keepass2android.javafilestorage.WebDavStorage.uploadFile(WebDavStorage.java:315) at keepass2android.javafilestorage.WebDavStorage.uploadFile(WebDavStorage.java:267) at mono.java.lang.RunnableImplementor.n_run(Native Method) at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29) at java.lang.Thread.run(Thread.java:1119) Suppressed: java.io.IOException: unexpected end of stream on path/to/my/database/... ... 21 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more Suppressed: java.io.IOException: unexpected end of stream on path/to/my/database/... ... 21 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more Suppressed: java.io.IOException: unexpected end of stream on path/to/my/database/... ... 21 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more Suppressed: java.io.IOException: unexpected end of stream on path/to/my/database/... ... 21 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more Suppressed: java.io.IOException: unexpected end of stream on path/to/my/database/... ... 21 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more

--- End of managed Java.IO.IOException stack trace --- java.io.IOException: unexpected end of stream on path/to/my/database/... at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:210) at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.kt:110) at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.kt:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:34) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at com.burgstaller.okhttp.AuthenticationCacheInterceptor.intercept(AuthenticationCacheInterceptor.java:45) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201) at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154) at keepass2android.javafilestorage.WebDavStorage.uploadFile(WebDavStorage.java:315) at keepass2android.javafilestorage.WebDavStorage.uploadFile(WebDavStorage.java:267) at mono.java.lang.RunnableImplementor.n_run(Native Method) at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:29) at java.lang.Thread.run(Thread.java:1119) Suppressed: java.io.IOException: unexpected end of stream on path/to/my/database/... ... 21 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more Suppressed: java.io.IOException: unexpected end of stream on path/to/my/database/... ... 21 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more Suppressed: java.io.IOException: unexpected end of stream on path/to/my/database/... ... 21 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more Suppressed: java.io.IOException: unexpected end of stream on path/to/my/database/... ... 21 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more Suppressed: java.io.IOException: unexpected end of stream on path/to/my/database/... ... 21 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more Caused by: java.io.EOFException: \n not found: limit=0 content=… at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:335) at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:180) ... 20 more

Exception_EndOfInnerExceptionStack at keepass2android.Io.JavaFileStorage.JavaFileStorageWriteTransaction.CommitWrite() at keepass2android.Io.CachingFileStorage.UpdateRemoteFile(Stream cachedData, IOConnectionInfo ioc, Boolean useFileTransaction, String hash) at keepass2android.Io.CachingFileStorage.TryUpdateRemoteFile(Stream cachedData, IOConnectionInfo ioc, Boolean useFileTransaction, String hash) 02.12.2025 19:02:00:30 -- GroupActivity.OnPause 39 02.12.2025 19:02:00:30 -- Timeout start 02.12.2025 19:02:00:44 -- DatabaseSettingsActivity.OnCreate 41 02.12.2025 19:02:00:45 -- DatabaseSettingsActivity:apptask= 41 02.12.2025 19:02:00:45 -- Setting FLAG_SECURE. 02.12.2025 19:02:00:50 -- DatabaseSettingsActivity.OnStart 41 02.12.2025 19:02:00:50 -- DatabaseSettingsActivity.OnResume 41 02.12.2025 19:02:00:51 -- DatabaseIsUnlocked=True 41 02.12.2025 19:02:00:51 -- Timeout cancel 02.12.2025 19:02:00:565 -- GroupActivity.OnStop 39 02.12.2025 19:02:10:96 -- DatabaseSettingsActivity.OnPause 41 02.12.2025 19:02:10:97 -- Timeout start 02.12.2025 19:02:19:816 -- DatabaseSettingsActivity.OnResume 41 02.12.2025 19:02:19:816 -- DatabaseIsUnlocked=True 41 02.12.2025 19:02:19:816 -- Timeout cancel 02.12.2025 19:02:21:752 -- DatabaseSettingsActivity.OnPause 41 02.12.2025 19:02:21:756 -- Timeout start 02.12.2025 19:02:22:366 -- DatabaseSettingsActivity.OnStop 41 02.12.2025 19:04:12:140 -- DatabaseSettingsActivity.OnStart 41 02.12.2025 19:04:12:142 -- DatabaseSettingsActivity.OnResume 41 02.12.2025 19:04:12:144 -- DatabaseIsUnlocked=True 41 02.12.2025 19:04:12:145 -- Timeout cancel

Describe what you expected to happen:

The sync executes successfully

What version of Keepass2Android are you using?

1.14-r4

Which version of Android are you on?

16

canaz avatar Dec 02 '25 19:12 canaz

Dito Android 15 Version 1.14-r4

Java Fehler beim Sync auf WebDAV Laufwerk (nur per Log Datei erkennbar)

Geschrieben wird eine "temp" Datei, aber das überschreiben scheint nicht zu klappen.

Gothico74 avatar Dec 06 '25 20:12 Gothico74

Can you reproduce this now everytime you try to make a change to the database?

PhilippC avatar Dec 08 '25 08:12 PhilippC

Do you get any errors/warnings indicating that the remote file is broken (EOF sounds a bit like reading it isn't successful)?

PhilippC avatar Dec 08 '25 08:12 PhilippC

Can you reproduce this now everytime you try to make a change to the database?

Yes. Auto and manual sync reproduces an error. Big red screen für a half second. Log gives a code 400

https://pastebin.com/SUF8TE0J

LOGFILE SHOWS LOGIN CREDENTIALS IN PLAIN TEXT

Gothico74 avatar Dec 08 '25 09:12 Gothico74

@Gothico74 Unfortunately I cannot access the file. It says it's in a private paste. You can also share it to [email protected]. Credentials shouldn't be part of log files, of course. I will fix this as soon as I see where exactly this is leaked.

PhilippC avatar Dec 08 '25 10:12 PhilippC