diff options
author | 2024-09-05 00:28:56 +0000 | |
---|---|---|
committer | 2024-09-05 00:28:56 +0000 | |
commit | 4106e04d9ee9870117e559836aaec4db4dab591b (patch) | |
tree | 8d00ac082bac82f23cfed26506a72a77198a70b3 | |
parent | 27eae810c8904c9907df4aba944dfb54742d54cd (diff) | |
parent | d4056389f1f7e8f2d8052a9922a54873afa5f4de (diff) |
Merge "[pm] fix potential ArrayIndexOutOfBoundsExceptions in user array calculations" into main
-rw-r--r-- | services/core/java/com/android/server/pm/PackageSetting.java | 46 |
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(); } /** |