From 6f24df4ab898d0175e9661a2bf32a66210b78119 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Tue, 16 Feb 2021 08:34:07 -0800 Subject: [PATCH] Fix forgetAllPackageInfos OutOfBoundsException Removing a package in all users results the AndroidPackage being removed from the cache. This decreases the size of the cache and leads to ArrayIndexOutOfBoundsException since we were iterating using the former size of the cache as the upper bound. Iterating in reverse order will allow for items to be removed from the back while iterating. Bug: 180157891 Test: create user and remove user Change-Id: Ic1bc66cec76e0342144a0629eaee2f7401ec5b16 --- .../java/com/android/server/om/OverlayManagerService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java index 905733cf5c9bc..dbd121137b57e 100644 --- a/services/core/java/com/android/server/om/OverlayManagerService.java +++ b/services/core/java/com/android/server/om/OverlayManagerService.java @@ -1341,7 +1341,9 @@ public final class OverlayManagerService extends SystemService { } public void forgetAllPackageInfos(final int userId) { - for (int i = 0, n = mCache.size(); i < n; i++) { + // Iterate in reverse order since removing the package in all users will remove the + // package from the cache. + for (int i = mCache.size() - 1; i >= 0; i--) { removePackageUser(mCache.valueAt(i), userId); } }