Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 210c21c3 authored by William Loh's avatar William Loh
Browse files

Fix NullPointerException in deletePackageLIF

Check package setting is not null before calling isSystemApp.

Bug: 312606711
Test: presubmit
Change-Id: I7ad21fbc94be1858e99b3bc44a4ecdc524acd725
parent c4b42504
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -357,6 +357,12 @@ final class DeletePackageHelper {
        final DeletePackageAction action;
        synchronized (mPm.mLock) {
            final PackageSetting ps = mPm.mSettings.getPackageLPr(packageName);
            if (ps == null) {
                if (DEBUG_REMOVE) {
                    Slog.d(TAG, "Attempted to remove non-existent package " + packageName);
                }
                return false;
            }
            final PackageSetting disabledPs = mPm.mSettings.getDisabledSystemPkgLPr(ps);
            if (PackageManagerServiceUtils.isSystemApp(ps)
                    && mPm.checkPermission(CONTROL_KEYGUARD, packageName, UserHandle.USER_SYSTEM)
+11 −0
Original line number Diff line number Diff line
@@ -22,12 +22,14 @@ import android.content.pm.PackageManager.PERMISSION_DENIED
import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.content.pm.UserInfo
import android.os.Build
import android.os.UserHandle
import android.os.UserHandle.USER_SYSTEM
import android.util.Log
import com.android.server.testutils.any
import com.android.server.testutils.spy
import com.android.server.testutils.whenever
import com.google.common.truth.Truth.assertThat
import org.junit.Assert.assertFalse
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -177,4 +179,13 @@ class DeletePackageHelperTest {

        assertThat(result).isEqualTo(PackageManager.DELETE_FAILED_INTERNAL_ERROR)
    }

    @Test
    fun deletePackageLIFWithNonExistantPackage_isFalse() {
        val dph = DeletePackageHelper(mPms, mock(RemovePackageHelper::class.java),
                                      mock(BroadcastHelper::class.java))
        val result = dph.deletePackageLIF("a.nonexistent.package", UserHandle.of(USER_SYSTEM), true,
                                          intArrayOf(0), 0, PackageRemovedInfo(), true)
        assertFalse(result)
    }
}