Fixed
Status Update
Comments
kc...@google.com <kc...@google.com> #2
Do you know what device(s) this is happening on? Looks like it's crashing in the framework code perhaps in autogenerated binder code.
android.hardware.fingerprint.IFingerprintService$Stub$Proxy.authenticate(IFingerprintService.java:341)
android.hardware.fingerprint.IFingerprintService$Stub$Proxy.authenticate(IFingerprintService.java:341)
ma...@gmail.com <ma...@gmail.com> #3
So far seeing on:
LGE LM-Q710(FGN)
LGE LM-X220
LGE LM-X410(FG)
BlackBerry BBB100-1
TCL REVVL 2
LGE LM-Q710(FGN)
LGE LM-X220
LGE LM-X410(FG)
BlackBerry BBB100-1
TCL REVVL 2
si...@pivot.co <si...@pivot.co> #4
We also observed similar crash in IFingerprintService.cancelAuthentication(IFingerprintService.java:320)
Caused by java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.os.Parcel.readException(Parcel.java:2019)
at android.os.Parcel.readException(Parcel.java:1959)
at android.hardware.fingerprint.IFingerprintService$Stub$Proxy.cancelAuthentication(IFingerprintService.java:320)
at android.hardware.fingerprint.FingerprintManager.cancelAuthentication(FingerprintManager.java:1020)
at android.hardware.fingerprint.FingerprintManager.-wrap2(FingerprintManager.java)
at android.hardware.fingerprint.FingerprintManager$OnAuthenticationCancelListener.onCancel(FingerprintManager.java:224)
at android.os.CancellationSignal.cancel(CancellationSignal.java:77)
at androidx.core.os.CancellationSignal.cancel(CancellationSignal.java:84)
at androidx.biometric.FingerprintHelperFragment.cancel(FingerprintHelperFragment.java:301)
at androidx.biometric.BiometricPrompt.dismissFingerprintFragments(BiometricPrompt.java:984)
at androidx.biometric.BiometricPrompt.access$800(BiometricPrompt.java:67)
at androidx.biometric.BiometricPrompt$2.onPause(BiometricPrompt.java:520)
at java.lang.reflect.Method.invoke(Method.java)
at androidx.lifecycle.ClassesInfoCache$MethodReference.invokeCallback(ClassesInfoCache.java:216)
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeMethodsForEvent(ClassesInfoCache.java:194)
at androidx.lifecycle.ClassesInfoCache$CallbackInfo.invokeCallbacks(ClassesInfoCache.java:185)
at androidx.lifecycle.ReflectiveGenericLifecycleObserver.onStateChanged(ReflectiveGenericLifecycleObserver.java:36)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:361)
at androidx.lifecycle.LifecycleRegistry.backwardPass(LifecycleRegistry.java:316)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:334)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:145)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:131)
at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:123)
at androidx.lifecycle.ReportFragment.onPause(ReportFragment.java:96)
at android.app.Fragment.performPause(Fragment.java:2709)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1334)
at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1557)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1618)
at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManagerImpl.java:3027)
at android.app.FragmentManagerImpl.dispatchPause(FragmentManagerImpl.java:2993)
at android.app.FragmentController.dispatchPause(FragmentController.java:211)
at android.app.Activity.performPause(Activity.java:7170)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1409)
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4026)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4003)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3977)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3951)
at android.app.ActivityThread.-wrap15(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1647)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:175)
at android.app.ActivityThread.main(ActivityThread.java:6724)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
BUILD INFO
- Device type: LG K11
- OS version: 8.1.0
- Biometric library version: androidx.biometric:biometric:1.0.1
ph...@monzo.com <ph...@monzo.com> #5
We're also seeing this occasionally - we've seen the FingerprintHelperFragment
stack trace reported above, as well as this slightly different one (they all have the same underlying cause):
Caused by java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.os.Parcel.createException(Parcel.java:1959)
at android.os.Parcel.readException(Parcel.java:1921)
at android.os.Parcel.readException(Parcel.java:1871)
at android.hardware.fingerprint.IFingerprintService$Stub$Proxy.authenticate(IFingerprintService.java:339)
at android.hardware.fingerprint.FingerprintManager.authenticate(FingerprintManager.java:480)
at android.hardware.fingerprint.FingerprintManager.authenticate(FingerprintManager.java:557)
at android.hardware.biometrics.BiometricPrompt.authenticate(BiometricPrompt.java:435)
at androidx.biometric.BiometricFragment.onCreateView(BiometricFragment.java:311)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManager.dispatchPause(FragmentManager.java:2593)
at androidx.fragment.app.FragmentController.dispatchPause(FragmentController.java:280)
at androidx.fragment.app.FragmentActivity.onPause(FragmentActivity.java:419)
at android.app.Activity.performPause(Activity.java:7663)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1536)
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:4699)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:4664)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:4599)
at android.app.servertransaction.PauseActivityItem.execute(PauseActivityItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2185)
at android.os.Handler.dispatchMessage(Handler.java:112)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7593)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
We've only rolled this out to 10% of our user base so far, but here's our current list of affected devices:
Count | Device |
---|---|
4 | INFINIX MOBILITY LIMITED Infinix X606D (Android 8.1.0) |
2 | Sony G8441 (Android 9) |
2 | Xiaomi Mi A1 (Android 9) |
2 | HUAWEI LLD-L21 (Android 9) |
2 | samsung SM-G935F (Android 8.0.0) |
2 | vivo vivo 1904 (Android 9) |
2 | HUAWEI FIG-LX1 (Android 9) |
1 | HUAWEI LDN-L01 (Android 8.0.0) |
1 | HUAWEI ANE-LX1 (Android 9) |
There's some discussion of the underlying framework bug in
cu...@google.com <cu...@google.com>
cu...@google.com <cu...@google.com>
ap...@google.com <ap...@google.com> #6
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 7e9dd629009e348407a00e936f7b0927dbee7c30
Author: Grace Cheng <graciecheng@google.com>
Date: Tue Oct 06 11:52:41 2020
Address uncaught NPE during fingerprint authentication
Updates androidx.biometric.BiometricFragment to catch potential NullPointerException in autogenerated binder code from FingerprintManagerCompat authenticate call
Test: ./gradlew biometric:biometric:test
Test: ./gradlew biometric:biometric:connectedAndroidTest
Test: ./gradlew biometric:integration-tests:testapp:connectedAndroidTest
Bug: 151316421
Change-Id: I713d529fecd08a396e998f8ccf6a3d83e46bf508
M biometric/biometric/src/main/java/androidx/biometric/BiometricFragment.java
M biometric/biometric/src/test/java/androidx/biometric/BiometricFragmentTest.java
https://android-review.googlesource.com/1453556
Branch: androidx-master-dev
commit 7e9dd629009e348407a00e936f7b0927dbee7c30
Author: Grace Cheng <graciecheng@google.com>
Date: Tue Oct 06 11:52:41 2020
Address uncaught NPE during fingerprint authentication
Updates androidx.biometric.BiometricFragment to catch potential NullPointerException in autogenerated binder code from FingerprintManagerCompat authenticate call
Test: ./gradlew biometric:biometric:test
Test: ./gradlew biometric:biometric:connectedAndroidTest
Test: ./gradlew biometric:integration-tests:testapp:connectedAndroidTest
Bug: 151316421
Change-Id: I713d529fecd08a396e998f8ccf6a3d83e46bf508
M biometric/biometric/src/main/java/androidx/biometric/BiometricFragment.java
M biometric/biometric/src/test/java/androidx/biometric/BiometricFragmentTest.java
kc...@google.com <kc...@google.com> #7
Re-assigning to curtis, since Grace merged a fix for the original bug. I think Curtis is adding some additional NPE checks before closing
ap...@google.com <ap...@google.com> #8
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 619b21f179cbf6194a9f4084f90a26fd75c0abd2
Author: Curtis Belmonte <curtislb@google.com>
Date: Fri Oct 09 15:03:31 2020
Catch more NPEs from framework biometric methods
Adds more checks to catch and handle NullPointerExceptions that may be
thrown by framework biometric methods, such as authenticate() or
cancelAuthentication().
Test: Biometric integration test app on API 27-30.
Test: ./gradlew biometric:biometric:test
Test: ./gradlew biometric:biometric:connectedAndroidTest
Test: ./gradlew biometric:integration-tests:testapp:connectedAndroidTest
Fixes: 151316421
Change-Id: I7d1b60ee727311c2bb1257942bd66beb4dd044e5
M biometric/biometric/src/main/java/androidx/biometric/BiometricFragment.java
M biometric/biometric/src/main/java/androidx/biometric/CancellationSignalProvider.java
M biometric/biometric/src/test/java/androidx/biometric/BiometricFragmentTest.java
M biometric/biometric/src/test/java/androidx/biometric/CancellationSignalProviderTest.java
https://android-review.googlesource.com/1456459
Branch: androidx-master-dev
commit 619b21f179cbf6194a9f4084f90a26fd75c0abd2
Author: Curtis Belmonte <curtislb@google.com>
Date: Fri Oct 09 15:03:31 2020
Catch more NPEs from framework biometric methods
Adds more checks to catch and handle NullPointerExceptions that may be
thrown by framework biometric methods, such as authenticate() or
cancelAuthentication().
Test: Biometric integration test app on API 27-30.
Test: ./gradlew biometric:biometric:test
Test: ./gradlew biometric:biometric:connectedAndroidTest
Test: ./gradlew biometric:integration-tests:testapp:connectedAndroidTest
Fixes: 151316421
Change-Id: I7d1b60ee727311c2bb1257942bd66beb4dd044e5
M biometric/biometric/src/main/java/androidx/biometric/BiometricFragment.java
M biometric/biometric/src/main/java/androidx/biometric/CancellationSignalProvider.java
M biometric/biometric/src/test/java/androidx/biometric/BiometricFragmentTest.java
M biometric/biometric/src/test/java/androidx/biometric/CancellationSignalProviderTest.java
Description
Seeing some crashes in the wild. Currently only Android 8.1.0.
```
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at android.os.Parcel.readException(Parcel.java:2019)
at android.os.Parcel.readException(Parcel.java:1959)
at android.hardware.fingerprint.IFingerprintService$Stub$Proxy.authenticate(IFingerprintService.java:341)
at android.hardware.fingerprint.FingerprintManager.authenticate(FingerprintManager.java:559)
at android.hardware.fingerprint.FingerprintManager.authenticate(FingerprintManager.java:519)
at androidx.core.hardware.fingerprint.FingerprintManagerCompat.authenticate(FingerprintManagerCompat:113)
at androidx.biometric.FingerprintHelperFragment.onCreateView(FingerprintHelperFragment.java:261)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
at androidx.fragment.app.FragmentManagerImpl.executePendingTransactions(FragmentManagerImpl:183)
at androidx.biometric.BiometricPrompt.authenticateInternal(BiometricPrompt.java:793)
at androidx.biometric.BiometricPrompt.authenticate(BiometricPrompt:648)
```