Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4106e04d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[pm] fix potential ArrayIndexOutOfBoundsExceptions in user array calculations" into main

parents 27eae810 d4056389
Loading
Loading
Loading
Loading
+10 −36
Original line number Diff line number Diff line
@@ -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();
    }

    /**