From ee55616ad3b33fd57e3accb889f9c132ca11abef Mon Sep 17 00:00:00 2001 From: Joanne Chung Date: Tue, 5 May 2020 19:59:30 +0800 Subject: [PATCH] Prevent crash when AutofillManager.isEnabled() is called If we cannot get flag information from the AutofillManagerService after the timeout, we should not crash the process, we need to handle the enabled information properly. Also fix NPE because of null component name while calling AutofillManagerServiceImpl.isWhitelistedForAugmentedAutofillLocked(). Bug: 151273845 Test: atest CtsAutoFillServiceTestCases Test: manual. Copy the text from Messenger and paste on search bar, no crash occurred and can paste text correctly. Change-Id: I8d7ca35226052944fd68fef60a013a65a7fb57c1 --- core/java/android/view/autofill/AutofillManager.java | 8 +++++++- .../server/autofill/AutofillManagerServiceImpl.java | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index 1773ec2b17eec..76fe6b5f666d9 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -1894,7 +1894,13 @@ public final class AutofillManager { final SyncResultReceiver receiver = new SyncResultReceiver(SYNC_CALLS_TIMEOUT_MS); mService.addClient(mServiceClient, client.autofillClientGetComponentName(), userId, receiver); - final int flags = receiver.getIntResult(); + int flags = 0; + try { + flags = receiver.getIntResult(); + } catch (SyncResultReceiver.TimeoutException e) { + Log.w(TAG, "Failed to initialize autofill: " + e); + return; + } mEnabled = (flags & FLAG_ADD_CLIENT_ENABLED) != 0; sDebug = (flags & FLAG_ADD_CLIENT_DEBUG) != 0; sVerbose = (flags & FLAG_ADD_CLIENT_VERBOSE) != 0; diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index 1bc026cd3b197..1aeb19bb4a9ed 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -260,7 +260,7 @@ final class AutofillManagerServiceImpl if (isEnabledLocked()) return FLAG_ADD_CLIENT_ENABLED; // Check if it's enabled for augmented autofill - if (isAugmentedAutofillServiceAvailableLocked() + if (componentName != null && isAugmentedAutofillServiceAvailableLocked() && isWhitelistedForAugmentedAutofillLocked(componentName)) { return FLAG_ADD_CLIENT_ENABLED_FOR_AUGMENTED_AUTOFILL_ONLY; }