PhilippC / keepass2android

Password manager app for Android
https://play.google.com/store/apps/details?id=keepass2android.keepass2android
GNU General Public License v3.0
4.8k stars 389 forks source link

[BUG] App crash with autofill on some applications #2488

Open Simone98RC opened 10 months ago

Simone98RC commented 10 months ago

Checks

Describe the bug you encountered:

When typing OTP/PIN/fingerprint on some applications, the Keepass2Android app crashes and show a ANR dialog.

This situation happen mostly with the banking app Poste Italiane, like in the following screenshot.

Screenshot_20240101-132019

Here you can find the error verbose log:

01/01/2024 22:40:48:774 -- parsing autofillStructure... 01/01/2024 22:40:48:789 -- System.ArgumentNullException: Value cannot be null. Parameter name: key at System.Collections.Generic.Dictionary2[TKey,TValue].FindEntry (TKey key) [0x00008] in <4087c528abc04d8290db635003aa826f>:0 at System.Collections.Generic.Dictionary2[TKey,TValue].TryGetValue (TKey key, TValue& value) [0x00000] in <4087c528abc04d8290db635003aa826f>:0 at Kp2aAutofillParser.AutofillHintsHelper.ToCanonicalHint (System.String hint) [0x00000] in <b3fff3fe4c1d4e8994fd67a2f50d0277>:0 at System.Linq.Enumerable+SelectEnumerableIterator2[TSource,TResult].MoveNext () [0x00048] in <052d4ffc295b472ebae9750a0d92739d>:0 at System.Collections.Generic.HashSet1[T].UnionWith (System.Collections.Generic.IEnumerable1[T] other) [0x00026] in <052d4ffc295b472ebae9750a0d92739d>:0 at System.Collections.Generic.HashSet1[T]..ctor (System.Collections.Generic.IEnumerable1[T] collection, System.Collections.Generic.IEqualityComparer1[T] comparer) [0x0004c] in <052d4ffc295b472ebae9750a0d92739d>:0 at System.Linq.Enumerable.ToHashSet[TSource] (System.Collections.Generic.IEnumerable1[T] source, System.Collections.Generic.IEqualityComparer1[T] comparer) [0x0000e] in <052d4ffc295b472ebae9750a0d92739d>:0 at System.Linq.Enumerable.ToHashSet[TSource] (System.Collections.Generic.IEnumerable1[T] source) [0x00000] in <052d4ffc295b472ebae9750a0d92739d>:0 at Kp2aAutofillParser.StructureParserBase1[FieldT].Parse (System.Boolean forFill, System.Boolean isManualRequest, Kp2aAutofillParser.AutofillView1[TField] autofillView) [0x000b3] in :0 at keepass2android.services.AutofillBase.StructureParser.Parse (System.Boolean forFill, System.Boolean isManualRequest, Kp2aAutofillParser.AutofillView1[TField] autofillView) [0x0000d] in <fb40c821fb5144dda464d1c7539af8a0>:0 at keepass2android.services.AutofillBase.StructureParser.ParseForFill (System.Boolean isManual) [0x00018] in <fb40c821fb5144dda464d1c7539af8a0>:0 at keepass2android.services.AutofillBase.AutofillServiceBase.OnFillRequest (Android.Service.Autofill.FillRequest request, Android.OS.CancellationSignal cancellationSignal, Android.Service.Autofill.FillCallback callback) [0x0009f] in <fb40c821fb5144dda464d1c7539af8a0>:0 at Android.Service.Autofill.AutofillService.n_OnFillRequest_Landroid_service_autofill_FillRequest_Landroid_os_CancellationSignal_Landroid_service_autofill_FillCallback_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_request, System.IntPtr native_cancellationSignal, System.IntPtr native__callback) [0x00020] in <3e1504268cb1422b8c7c2994fae408c2>:0 at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLLL_V (_JniMarshal_PPLLL_V callback, System.IntPtr jnienv, System.IntPtr klazz, System.IntPtr p0, System.IntPtr p1, System.IntPtr p2) [0x00005] in <3e1504268cb1422b8c7c2994fae408c2>:0 01/01/2024 22:40:53:59 -- Creating application keepass2android.keepass2android. Version=197 01/01/2024 22:40:53:186 -- parsing autofillStructure... 01/01/2024 22:40:53:215 -- System.ArgumentNullException: Value cannot be null. Parameter name: key at System.Collections.Generic.Dictionary2[TKey,TValue].FindEntry (TKey key) [0x00008] in <4087c528abc04d8290db635003aa826f>:0 at System.Collections.Generic.Dictionary2[TKey,TValue].TryGetValue (TKey key, TValue& value) [0x00000] in <4087c528abc04d8290db635003aa826f>:0 at Kp2aAutofillParser.AutofillHintsHelper.ToCanonicalHint (System.String hint) [0x00000] in <b3fff3fe4c1d4e8994fd67a2f50d0277>:0 at System.Linq.Enumerable+SelectEnumerableIterator2[TSource,TResult].MoveNext () [0x00048] in <052d4ffc295b472ebae9750a0d92739d>:0 at System.Collections.Generic.HashSet1[T].UnionWith (System.Collections.Generic.IEnumerable1[T] other) [0x00026] in <052d4ffc295b472ebae9750a0d92739d>:0 at System.Collections.Generic.HashSet1[T]..ctor (System.Collections.Generic.IEnumerable1[T] collection, System.Collections.Generic.IEqualityComparer1[T] comparer) [0x0004c] in <052d4ffc295b472ebae9750a0d92739d>:0 at System.Linq.Enumerable.ToHashSet[TSource] (System.Collections.Generic.IEnumerable1[T] source, System.Collections.Generic.IEqualityComparer1[T] comparer) [0x0000e] in <052d4ffc295b472ebae9750a0d92739d>:0 at System.Linq.Enumerable.ToHashSet[TSource] (System.Collections.Generic.IEnumerable1[T] source) [0x00000] in <052d4ffc295b472ebae9750a0d92739d>:0 at Kp2aAutofillParser.StructureParserBase1[FieldT].Parse (System.Boolean forFill, System.Boolean isManualRequest, Kp2aAutofillParser.AutofillView1[TField] autofillView) [0x000b3] in :0 at keepass2android.services.AutofillBase.StructureParser.Parse (System.Boolean forFill, System.Boolean isManualRequest, Kp2aAutofillParser.AutofillView1[TField] autofillView) [0x0000d] in <fb40c821fb5144dda464d1c7539af8a0>:0 at keepass2android.services.AutofillBase.StructureParser.ParseForFill (System.Boolean isManual) [0x00018] in <fb40c821fb5144dda464d1c7539af8a0>:0 at keepass2android.services.AutofillBase.AutofillServiceBase.OnFillRequest (Android.Service.Autofill.FillRequest request, Android.OS.CancellationSignal cancellationSignal, Android.Service.Autofill.FillCallback callback) [0x0009f] in <fb40c821fb5144dda464d1c7539af8a0>:0 at Android.Service.Autofill.AutofillService.n_OnFillRequest_Landroid_service_autofill_FillRequest_Landroid_os_CancellationSignal_Landroid_service_autofill_FillCallback_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_request, System.IntPtr native_cancellationSignal, System.IntPtr native__callback) [0x00020] in <3e1504268cb1422b8c7c2994fae408c2>:0 at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLLL_V (_JniMarshal_PPLLL_V callback, System.IntPtr jnienv, System.IntPtr klazz, System.IntPtr p0, System.IntPtr p1, System.IntPtr p2) [0x00005] in <3e1504268cb1422b8c7c2994fae408c2>:0

Describe what you expected to happen:

The Keepass2Android should ignore that kind of authentication screen or, at least, it should ask for credentials without crashing.

What version of Keepass2Android are you using?

1.09e-r7

Which version of Android are you on?

14

PhilippC commented 10 months ago

can you give one or several apps where this happens exactly? I find several Poste Italiane apps, but the first one doesn't seem to crash for me?

Simone98RC commented 10 months ago

can you give one or several apps where this happens exactly? I find several Poste Italiane apps, but the first one doesn't seem to crash for me?

Actually I remember for sure only Poste Italiane app. To try with their banking app you have to own a bank account, the problem happens when I've to type PosteID six digits number code. I've seen a new commit to fix this bug, can you release an update for KeePass2Android app or simply a new apk to let me testing?

Tedenfe commented 7 months ago

The same happens with the bank app Revolut, when you try to transfer money to someone, then you click to fill up the Reference, the app crashes.

tburny commented 7 months ago

Same as @Tedenfe and the others - but with N26. Still happening for at least few weeks now. The bug also prevents me from pasting an text, as the crash screen interrupts any "paste text" overlays from the OS.

I would be more than willing to donate a beer if this but gets fixed, because otherwise KP2A works sooo well!

Preconditions (these might not be necessary)

Steps

Stack Trace Looking at the stack trace below it seems that there is an issue with the AutoFill at Kp2aAutofillParser.AutofillHintsHelper.ToCanonicalHint (System.String hint)

18.03.2024 10:00:59:430 -- parsing autofillStructure...
18.03.2024 10:00:59:471 -- System.ArgumentNullException: Value cannot be null.
Parameter name: key
  at System.Collections.Generic.Dictionary`2[TKey,TValue].FindEntry (TKey key) [0x00008] in <3deb12e7bedf4d1bb8b41d6af3450e05>:0 
  at System.Collections.Generic.Dictionary`2[TKey,TValue].TryGetValue (TKey key, TValue& value) [0x00000] in <3deb12e7bedf4d1bb8b41d6af3450e05>:0 
  at Kp2aAutofillParser.AutofillHintsHelper.ToCanonicalHint (System.String hint) [0x00000] in <b3fff3fe4c1d4e8994fd67a2f50d0277>:0 
  at System.Linq.Enumerable+SelectEnumerableIterator`2[TSource,TResult].MoveNext () [0x00048] in <052d4ffc295b472ebae9750a0d92739d>:0 
  at System.Collections.Generic.HashSet`1[T].UnionWith (System.Collections.Generic.IEnumerable`1[T] other) [0x00026] in <052d4ffc295b472ebae9750a0d92739d>:0 
  at System.Collections.Generic.HashSet`1[T]..ctor (System.Collections.Generic.IEnumerable`1[T] collection, System.Collections.Generic.IEqualityComparer`1[T] comparer) [0x0004c] in <052d4ffc295b472ebae9750a0d92739d>:0 
  at System.Linq.Enumerable.ToHashSet[TSource] (System.Collections.Generic.IEnumerable`1[T] source, System.Collections.Generic.IEqualityComparer`1[T] comparer) [0x0000e] in <052d4ffc295b472ebae9750a0d92739d>:0 
  at System.Linq.Enumerable.ToHashSet[TSource] (System.Collections.Generic.IEnumerable`1[T] source) [0x00000] in <052d4ffc295b472ebae9750a0d92739d>:0 
  at Kp2aAutofillParser.StructureParserBase`1[FieldT].Parse (System.Boolean forFill, System.Boolean isManualRequest, Kp2aAutofillParser.AutofillView`1[TField] autofillView) [0x000b3] in <b3fff3fe4c1d4e8994fd67a2f50d0277>:0 
  at keepass2android.services.AutofillBase.StructureParser.Parse (System.Boolean forFill, System.Boolean isManualRequest, Kp2aAutofillParser.AutofillView`1[TField] autofillView) [0x0000d] in <dabeaecbf9c0465bb1ce8a7bcc561766>:0 
  at keepass2android.services.AutofillBase.StructureParser.ParseForFill (System.Boolean isManual) [0x00018] in <dabeaecbf9c0465bb1ce8a7bcc561766>:0 
  at keepass2android.services.AutofillBase.AutofillServiceBase.OnFillRequest (Android.Service.Autofill.FillRequest request, Android.OS.CancellationSignal cancellationSignal, Android.Service.Autofill.FillCallback callback) [0x0009f] in <dabeaecbf9c0465bb1ce8a7bcc561766>:0 
  at Android.Service.Autofill.AutofillService.n_OnFillRequest_Landroid_service_autofill_FillRequest_Landroid_os_CancellationSignal_Landroid_service_autofill_FillCallback_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_request, System.IntPtr native_cancellationSignal, System.IntPtr native__callback) [0x00020] in <f14734ebc98e4416a8b2fbf77ffc79bb>:0 
  at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLLL_V (_JniMarshal_PPLLL_V callback, System.IntPtr jnienv, System.IntPtr klazz, System.IntPtr p0, System.IntPtr p1, System.IntPtr p2) [0x00005] in <f14734ebc98e4416a8b2fbf77ffc79bb>:0 
18.03.2024 10:01:03:396 -- Creating application keepass2android.keepass2android. Version=198

Environment Xiaomi Mi 9 Lite with Android 10 Keepass2Android Version 1.10-pre

fufufighter commented 6 months ago

Hi there! I am encountering the same behaviour as @tburny and @Tedenfe: transfering money or adding a recipient for money transfers in Revolut app crashes Keepass2android.

Environment: Xiaomi 13 - HyperOS (Android 14) Keepass2Android Version 1.10-pre