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

Commit 76043cf6 authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android (Google) Code Review
Browse files

Merge "Validate input for ContentService#setIsSyncable" into nyc-mr1-dev

parents b841c2d8 96b9c75c
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -838,7 +838,7 @@ public final class ContentService extends IContentService.Stub {
            SyncManager syncManager = getSyncManager();
            if (syncManager != null) {
                return syncManager.computeSyncable(
                        account, userId, providerName);
                        account, userId, providerName, false);
            }
        } finally {
            restoreCallingIdentity(identityToken);
@@ -854,6 +854,8 @@ public final class ContentService extends IContentService.Stub {
        mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SYNC_SETTINGS,
                "no permission to write the sync settings");

        syncable = normalizeSyncable(syncable);

        int userId = UserHandle.getCallingUserId();
        long identityToken = clearCallingIdentity();
        try {
@@ -1156,6 +1158,15 @@ public final class ContentService extends IContentService.Stub {
        }
    }

    private static int normalizeSyncable(int syncable) {
        if (syncable > 0) {
            return SyncStorageEngine.AuthorityInfo.SYNCABLE;
        } else if (syncable == 0) {
            return SyncStorageEngine.AuthorityInfo.NOT_SYNCABLE;
        }
        return SyncStorageEngine.AuthorityInfo.UNDEFINED;
    }

    /**
     * Hide this class since it is not part of api,
     * but current unittest framework requires it to be public
+7 −2
Original line number Diff line number Diff line
@@ -1001,7 +1001,12 @@ public class SyncManager {
        }
    }

    public int computeSyncable(Account account, int userId, String authority) {
    private int computeSyncable(Account account, int userId, String authority) {
        return computeSyncable(account, userId, authority, true);
    }

    public int computeSyncable(Account account, int userId, String authority,
            boolean checkAccountAccess) {
        final int status = getIsSyncable(account, userId, authority);
        if (status == AuthorityInfo.NOT_SYNCABLE) {
            return AuthorityInfo.NOT_SYNCABLE;
@@ -1025,7 +1030,7 @@ public class SyncManager {
        } catch (RemoteException e) {
            /* ignore - local call */
        }
        if (!canAccessAccount(account, owningPackage, owningUid)) {
        if (checkAccountAccess && !canAccessAccount(account, owningPackage, owningUid)) {
            Log.w(TAG, "Access to " + account + " denied for package "
                    + owningPackage + " in UID " + syncAdapterInfo.uid);
            return AuthorityInfo.SYNCABLE_NO_ACCOUNT_ACCESS;