summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Gustav Sennton <gsennton@google.com> 2016-04-08 18:33:30 +0100
committer Gustav Sennton <gsennton@google.com> 2016-04-09 09:59:46 +0100
commitff396f2710e60a4c596e30c7dc74ad7ef24a7ecc (patch)
tree791bed45a0363e851995ebf3d83fd81e9929b3f6
parentc3769ae3f344c8b69c14cbef789389699af15777 (diff)
Ensure we don't crash the system server when disabling/enabling package.
We shouldn't crash when trying to disable/enable a non-existent fallback package. Bug: 27918467 Change-Id: Ia94425ac197b17430900bb7a9e7b2d2bf65ab9b3
-rw-r--r--services/core/java/com/android/server/webkit/SystemImpl.java9
-rw-r--r--services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java2
2 files changed, 8 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/webkit/SystemImpl.java b/services/core/java/com/android/server/webkit/SystemImpl.java
index 9486cfdb87a0..ed935ced0037 100644
--- a/services/core/java/com/android/server/webkit/SystemImpl.java
+++ b/services/core/java/com/android/server/webkit/SystemImpl.java
@@ -19,6 +19,7 @@ package com.android.server.webkit;
import android.app.ActivityManagerNative;
import android.app.AppGlobals;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageDeleteObserver;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -187,7 +188,8 @@ public class SystemImpl implements SystemInterface {
enablePackageForAllUsers(context, packageName, false);
try {
PackageManager pm = AppGlobals.getInitialApplication().getPackageManager();
- if (pm.getApplicationInfo(packageName, 0).isUpdatedSystemApp()) {
+ ApplicationInfo applicationInfo = pm.getApplicationInfo(packageName, 0);
+ if (applicationInfo != null && applicationInfo.isUpdatedSystemApp()) {
pm.deletePackage(packageName, new IPackageDeleteObserver.Stub() {
public void packageDeleted(String packageName, int returnCode) {
enablePackageForAllUsers(context, packageName, false);
@@ -214,8 +216,9 @@ public class SystemImpl implements SystemInterface {
enable ? PackageManager.COMPONENT_ENABLED_STATE_DEFAULT :
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, 0,
userId, null);
- } catch (RemoteException e) {
- Log.w(TAG, "Tried to disable " + packageName + " for user " + userId + ": " + e);
+ } catch (RemoteException | IllegalArgumentException e) {
+ Log.w(TAG, "Tried to " + (enable ? "enable " : "disable ") + packageName
+ + " for user " + userId + ": " + e);
}
}
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java
index 32b195b4c71b..cd976e753a0a 100644
--- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java
+++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java
@@ -160,6 +160,8 @@ public class WebViewUpdateServiceImpl {
isFallbackEnabled = isEnabledPackage(
mSystemInterface.getPackageInfoForProvider(fallbackProvider));
} catch (NameNotFoundException e) {
+ // No fallback package installed -> early out.
+ return;
}
if (existsValidNonFallbackProvider