summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-09-05 00:28:56 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-09-05 00:28:56 +0000
commit4106e04d9ee9870117e559836aaec4db4dab591b (patch)
tree8d00ac082bac82f23cfed26506a72a77198a70b3
parent27eae810c8904c9907df4aba944dfb54742d54cd (diff)
parentd4056389f1f7e8f2d8052a9922a54873afa5f4de (diff)
Merge "[pm] fix potential ArrayIndexOutOfBoundsExceptions in user array calculations" into main
-rw-r--r--services/core/java/com/android/server/pm/PackageSetting.java46
1 files changed, 10 insertions, 36 deletions
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index d374142d3912..9fb9e717fe4d 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -42,6 +42,7 @@ import android.service.pm.PackageProto.UserInfoProto.ArchiveState.ArchiveActivit
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
+import android.util.IntArray;
import android.util.SparseArray;
import android.util.proto.ProtoOutputStream;
@@ -981,39 +982,23 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
}
int[] queryInstalledUsers(int[] users, boolean installed) {
- int num = 0;
+ IntArray installedUsers = new IntArray(users.length);
for (int user : users) {
if (getInstalled(user) == installed) {
- num++;
+ installedUsers.add(user);
}
}
- int[] res = new int[num];
- num = 0;
- for (int user : users) {
- if (getInstalled(user) == installed) {
- res[num] = user;
- num++;
- }
- }
- return res;
+ return installedUsers.toArray();
}
int[] queryUsersInstalledOrHasData(int[] users) {
- int num = 0;
- for (int user : users) {
- if (getInstalled(user) || readUserState(user).dataExists()) {
- num++;
- }
- }
- int[] res = new int[num];
- num = 0;
+ IntArray usersInstalledOrHasData = new IntArray(users.length);
for (int user : users) {
if (getInstalled(user) || readUserState(user).dataExists()) {
- res[num] = user;
- num++;
+ usersInstalledOrHasData.add(user);
}
}
- return res;
+ return usersInstalledOrHasData.toArray();
}
long getCeDataInode(int userId) {
@@ -1283,25 +1268,14 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
}
public int[] getNotInstalledUserIds() {
- int count = 0;
int userStateCount = mUserStates.size();
+ IntArray notInstalledUsers = new IntArray(userStateCount);
for (int i = 0; i < userStateCount; i++) {
if (!mUserStates.valueAt(i).isInstalled()) {
- count++;
- }
- }
- if (count == 0) {
- return EmptyArray.INT;
- }
-
- int[] excludedUserIds = new int[count];
- int idx = 0;
- for (int i = 0; i < userStateCount; i++) {
- if (!mUserStates.valueAt(i).isInstalled()) {
- excludedUserIds[idx++] = mUserStates.keyAt(i);
+ notInstalledUsers.add(mUserStates.keyAt(i));
}
}
- return excludedUserIds;
+ return notInstalledUsers.toArray();
}
/**