OSDN Git Service

Fix ArrayMap.get vs ArrayMap.valueAt typo
authorMårten Kongstad <marten.kongstad@sonymobile.com>
Fri, 27 Jan 2017 09:15:49 +0000 (10:15 +0100)
committerAdam Lesinski <adamlesinski@google.com>
Fri, 17 Mar 2017 19:14:45 +0000 (12:14 -0700)
Replace incorrect call to ArrayMap.get with correct call
ArrayMap.valueAt.

This bug was discovered when removing an overlay from /vendor/overlay
and restarting the device. The OMS settings file still referred to the
overlay, and when the settings item was to be removed, the following
crash occurred.

*** FATAL EXCEPTION IN SYSTEM PROCESS: main
java.lang.NullPointerException: Attempt to read from field 'java.lang.String android.content.om.OverlayInfo.packageName' on a null object reference
   at com.android.server.om.OverlayManagerServiceImpl.onSwitchUser(OverlayManagerServiceImpl.java:121)
   at com.android.server.om.OverlayManagerService.onSwitchUser(OverlayManagerService.java:257)
   at com.android.server.om.OverlayManagerService.<init>(OverlayManagerService.java:237)
   at com.android.server.SystemServer.startBootstrapServices(SystemServer.java:580)
   at com.android.server.SystemServer.run(SystemServer.java:363)
   at com.android.server.SystemServer.main(SystemServer.java:238)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:226)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:726)

Test: adb exec-out stop && adb exec-out rm /vendor/overlay/... && adb exec-out start
Change-Id: I341a8d6eb90555b9169e5cd7dfac87d850b72e9b

services/core/java/com/android/server/om/OverlayManagerServiceImpl.java

index 6af1c3b..db133f8 100644 (file)
@@ -130,7 +130,7 @@ final class OverlayManagerServiceImpl {
         // installed and should be removed
         final int storedOverlayInfosSize = storedOverlayInfos.size();
         for (int i = 0; i < storedOverlayInfosSize; i++) {
-            final OverlayInfo oi = storedOverlayInfos.get(i);
+            final OverlayInfo oi = storedOverlayInfos.valueAt(i);
             mSettings.remove(oi.packageName, oi.userId);
             removeIdmapIfPossible(oi);
             packagesToUpdateAssets.add(oi.targetPackageName);