braintree_android: Crash during 3DS when Android kills the app
General information
- SDK/Library version:
4.14.0(tested as reproducible also in4.15.0) - Environment: Sandbox and Production
- Android Version and Device: doesn’t matter
- Braintree dependencies:
"com.braintreepayments.api:three-d-secure:4.14.0"
Issue description
The issue appears during a 3DS checkout. If user put the app in background and Android kills the app’s process, when user returns to 3DS screen and proceed with 3DS the app crashes.
Step to reproduce
It’s reproducible using Demo app:
- enable 3D secure from Settings;
- start using a credit card;
- fill the form and click on purchase;
- when 3DS screen appears, put the app in background;
- emulate an Android kill process (run
am kill com.braintreepayments.demoin an adb shell, or tap on Terminate Application from logcat in AS); - reopen the app from multitasking pane;
- complete 3DS checkout.
- crash occurs.
Stack trace
2022-08-29 12:55:34.563 8901-8901/com.braintreepayments.demo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.braintreepayments.demo, PID: 8901
java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.cardinalcommerce.a.configure.init' on a null object reference
at com.cardinalcommerce.a.setEditableFactory.init(:2082)
at com.cardinalcommerce.a.setOnEditorActionListener.Cardinal(:38564)
at com.cardinalcommerce.a.setOnEditorActionListener$7.onClick(:389)
at android.view.View.performClick(View.java:7441)
at android.view.View.performClickInternal(View.java:7418)
at android.view.View.access$3700(View.java:835)
at android.view.View$PerformClick.run(View.java:28676)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
2022-08-29 12:55:34.564 8901-8901/com.braintreepayments.demo E/Exception: Uncaught Exception
java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.cardinalcommerce.a.configure.init' on a null object reference
at com.cardinalcommerce.a.setEditableFactory.init(:2082)
at com.cardinalcommerce.a.setOnEditorActionListener.Cardinal(:38564)
at com.cardinalcommerce.a.setOnEditorActionListener$7.onClick(:389)
at android.view.View.performClick(View.java:7441)
at android.view.View.performClickInternal(View.java:7418)
at android.view.View.access$3700(View.java:835)
at android.view.View$PerformClick.run(View.java:28676)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
2022-08-29 12:55:35.148 8949-8949/com.braintreepayments.demo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.braintreepayments.demo, PID: 8949
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.braintreepayments.demo/com.braintreepayments.api.ThreeDSecureActivity}: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.cardinalcommerce.a.configure.init' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3635)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.cardinalcommerce.a.configure.init' on a null object reference
at com.cardinalcommerce.cardinalmobilesdk.Cardinal.cca_continue(:21082)
at com.braintreepayments.api.CardinalClient.continueLookup(CardinalClient.java:44)
at com.braintreepayments.api.ThreeDSecureActivity.onCreateInternal(ThreeDSecureActivity.java:39)
at com.braintreepayments.api.ThreeDSecureActivity.onCreate(ThreeDSecureActivity.java:28)
at android.app.Activity.performCreate(Activity.java:8051)
at android.app.Activity.performCreate(Activity.java:8031)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3608)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Reactions: 4
- Comments: 20 (11 by maintainers)
Happy Birthday to this issue!
We were told a few days ago by our PayPal contact that Cardinal has an internal fix for this and hopefully we’ll finally be able to put this crash to bed. Here’s to hoping at least.
Hi @sshropshire, any update on this?
@sshropshire - at the moment, this accounts for roughly 10% of our crashes (our crash rate is relatively low, but this is definitely a standout). Is there information you’re looking for specifically in regards to overall impact? We’re nervous about any sort of crash related to 3DS since reproduction of the issues seems to be very dependent on the bank.
I will have our product team member reach out to the support team in the meantime - thank you for the link.