From e184a01e01b955a28abe96171752216b1ad0eb4f Mon Sep 17 00:00:00 2001 From: TYM Tsai Date: Mon, 10 Jul 2023 14:25:05 +0800 Subject: [PATCH] Avoid iterators of collection in PMS Bug: 130758802 Test: atest PackageManagerServiceHostTests Change-Id: I2af01e2205ffc45afcf14bb9b3e6f80f5cddf877 --- .../server/pm/PackageManagerService.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9137d449121cd..10fe65dfc7c1b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2121,8 +2121,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService // Save the names of pre-existing packages prior to scanning, so we can determine // which system packages are completely new due to an upgrade. mExistingPackages = new ArraySet<>(packageSettings.size()); - for (PackageSetting ps : packageSettings.values()) { - mExistingPackages.add(ps.getPackageName()); + for (int i = 0; i < packageSettings.size(); i++) { + mExistingPackages.add(packageSettings.valueAt(i).getPackageName()); } // Triggering {@link com.android.server.pm.crossprofile. @@ -2249,8 +2249,10 @@ public class PackageManagerService implements PackageSender, TestUtilityService // If this is the first boot or an update from pre-M, then we need to initialize the // default preferred apps across all defined users. if (mPromoteSystemApps || mFirstBoot) { - for (UserInfo user : mInjector.getUserManagerInternal().getUsers(true)) { - mSettings.applyDefaultPreferredAppsLPw(user.id); + final List users = mInjector.getUserManagerInternal().getUsers(true); + for (int i = 0; i < users.size(); i++) { + mSettings.applyDefaultPreferredAppsLPw(users.get(i).id); + } } @@ -4278,8 +4280,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService final Computer snapshot = snapshotComputer(); for (String packageName : apkList) { setSystemAppHiddenUntilInstalled(snapshot, packageName, true); - for (UserInfo user : mInjector.getUserManagerInternal().getUsers(false)) { - setSystemAppInstallState(snapshot, packageName, false, user.id); + final List users = mInjector.getUserManagerInternal().getUsers(false); + for (int i = 0; i < users.size(); i++) { + setSystemAppInstallState(snapshot, packageName, false, users.get(i).id); } } } @@ -4724,7 +4727,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService ArraySet set = new ArraySet<>(resolver.filterSet()); - for (CrossProfileIntentFilter filter : set) { + for (int i = 0; i < set.size(); i++) { + final CrossProfileIntentFilter filter = set.valueAt(i); if (IntentFilter.filterEquals(filter.mFilter, intentFilter) && filter.getOwnerPackage().equals(ownerPackage) && filter.getTargetUserId() == targetUserId @@ -6066,8 +6070,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService final Computer snapshot = snapshotComputer(); enforceOwnerRights(snapshot, packageName, Binder.getCallingUid()); mimeTypes = CollectionUtils.emptyIfNull(mimeTypes); - for (String mimeType : mimeTypes) { - if (mimeType.length() > 255) { + for (int i = 0; i < mimeTypes.size(); i++) { + if (mimeTypes.get(i).length() > 255) { throw new IllegalArgumentException("MIME type length exceeds 255 characters"); } } @@ -6941,7 +6945,9 @@ public class PackageManagerService implements PackageSender, TestUtilityService if (targetPkg.getLibraryNames() != null) { // Set the overlay paths for dependencies of the shared library. - for (final String libName : targetPkg.getLibraryNames()) { + List libraryNames = targetPkg.getLibraryNames(); + for (int j = 0; j < libraryNames.size(); j++) { + final String libName = libraryNames.get(j); ArraySet modifiedDependents = null; final SharedLibraryInfo info = computer.getSharedLibraryInfo(libName, @@ -6955,7 +6961,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService if (dependents == null) { continue; } - for (final VersionedPackage dependent : dependents) { + for (int k = 0; k < dependents.size(); k++) { + final VersionedPackage dependent = dependents.get(k); final PackageStateInternal dependentState = computer.getPackageStateInternal(dependent.getPackageName()); if (dependentState == null) {