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

Commit a5148b26 authored by Aseem Kumar's avatar Aseem Kumar
Browse files

Move account name length check from Account.java to AccountManagerService.

This change ensures that existing account are safe, and new accounts with long name aren't added.
Bug: 169762606
Test: added tests to AccountManagerServiceTest.java

Change-Id: If549761e9252bfed22effcf8720a08a2cea01974
parent 6726af8d
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import android.util.Log;

import com.android.internal.annotations.GuardedBy;

import java.util.Objects;
import java.util.Set;

/**
@@ -87,12 +86,6 @@ public class Account implements Parcelable {
        if (TextUtils.isEmpty(type)) {
            throw new IllegalArgumentException("the type must not be empty: " + type);
        }
        if (name.length() > 200) {
            throw new IllegalArgumentException("account name is longer than 200 characters");
        }
        if (type.length() > 200) {
            throw new IllegalArgumentException("account type is longer than 200 characters");
        }
        this.name = name;
        this.type = type;
        this.accessId = accessId;
+12 −0
Original line number Diff line number Diff line
@@ -1820,6 +1820,14 @@ public class AccountManagerService
        if (account == null) {
            return false;
        }
        if (account.name != null && account.name.length() > 200) {
            Log.w(TAG, "Account cannot be added - Name longer than 200 chars");
            return false;
        }
        if (account.type != null && account.type.length() > 200) {
            Log.w(TAG, "Account cannot be added - Name longer than 200 chars");
            return false;
        }
        if (!isLocalUnlockedUser(accounts.userId)) {
            Log.w(TAG, "Account " + account.toSafeString() + " cannot be added - user "
                    + accounts.userId + " is locked. callingUid=" + callingUid);
@@ -2095,6 +2103,10 @@ public class AccountManagerService
    private Account renameAccountInternal(
            UserAccounts accounts, Account accountToRename, String newName) {
        Account resultAccount = null;
        if (newName != null && newName.length() > 200) {
            Log.e(TAG, "renameAccount failed - account name longer than 200");
            return null;
        }
        /*
         * Cancel existing notifications. Let authenticators
         * re-post notifications as required. But we don't know if
+22 −0
Original line number Diff line number Diff line
@@ -247,6 +247,28 @@ public class AccountManagerServiceTest extends AndroidTestCase {
        assertEquals(a31, accounts[1]);
    }

    @SmallTest
    public void testCheckAddAccountLongName() throws Exception {
        unlockSystemUser();
        String longString = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                + "aaaaa";
        Account a11 = new Account(longString, AccountManagerServiceTestFixtures.ACCOUNT_TYPE_1);
        Account a21 = new Account("account2", longString);

        mAms.addAccountExplicitly(
                a11, /* password= */ "p11", /* extras= */ null, /* callerPackage= */ null);
        mAms.addAccountExplicitly(
                a21, /* password= */ "p12", /* extras= */ null, /* callerPackage= */ null);

        String[] list = new String[]{AccountManagerServiceTestFixtures.CALLER_PACKAGE};
        when(mMockPackageManager.getPackagesForUid(anyInt())).thenReturn(list);
        Account[] accounts = mAms.getAccountsAsUser(null,
                UserHandle.getCallingUserId(), mContext.getOpPackageName());
        assertEquals(0, accounts);
    }

    @SmallTest
    public void testPasswords() throws Exception {
        unlockSystemUser();