From ff396f2710e60a4c596e30c7dc74ad7ef24a7ecc Mon Sep 17 00:00:00 2001 From: Gustav Sennton Date: Fri, 8 Apr 2016 18:33:30 +0100 Subject: [PATCH] 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 --- .../core/java/com/android/server/webkit/SystemImpl.java | 9 ++++++--- .../android/server/webkit/WebViewUpdateServiceImpl.java | 2 ++ 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 9486cfdb87a0f..ed935ced0037f 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 32b195b4c71b9..cd976e753a0a6 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