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

Commit 02222d94 authored by Kholoud Mohamed's avatar Kholoud Mohamed
Browse files

Apply package name size limit to packages

Fixes: 336214088
Test: btest android.devicepolicy.cts.PermitInputMethodsTest#setPermittedInputMethods_packageNameTooLong_throwsException[IncludeRunOnProfileOwnerProfileWithNoDeviceOwner]
Change-Id: If6625fff147e095e1ac81d6ad1815772dbea80ab
parent ef5f494d
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -28,18 +28,18 @@ import java.util.Set;
/**
 * @hide
 */
public final class StringSetPolicyValue extends PolicyValue<Set<String>> {
public final class PackageSetPolicyValue extends PolicyValue<Set<String>> {

    public StringSetPolicyValue(@NonNull Set<String> value) {
    public PackageSetPolicyValue(@NonNull Set<String> value) {
        super(value);
        if (Flags.devicePolicySizeTrackingInternalBugFixEnabled()) {
            for (String str : value) {
                PolicySizeVerifier.enforceMaxStringLength(str, "policyValue");
            for (String packageName : value) {
                PolicySizeVerifier.enforceMaxPackageNameLength(packageName);
            }
        }
    }

    public StringSetPolicyValue(Parcel source) {
    public PackageSetPolicyValue(Parcel source) {
        this(readValues(source));
    }

@@ -56,7 +56,7 @@ public final class StringSetPolicyValue extends PolicyValue<Set<String>> {
    public boolean equals(@Nullable Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        StringSetPolicyValue other = (StringSetPolicyValue) o;
        PackageSetPolicyValue other = (PackageSetPolicyValue) o;
        return Objects.equals(getValue(), other.getValue());
    }

@@ -67,7 +67,7 @@ public final class StringSetPolicyValue extends PolicyValue<Set<String>> {

    @Override
    public String toString() {
        return "StringSetPolicyValue { " + getValue() + " }";
        return "PackageNameSetPolicyValue { " + getValue() + " }";
    }

    @Override
@@ -84,16 +84,16 @@ public final class StringSetPolicyValue extends PolicyValue<Set<String>> {
    }

    @NonNull
    public static final Creator<StringSetPolicyValue> CREATOR =
            new Creator<StringSetPolicyValue>() {
    public static final Creator<PackageSetPolicyValue> CREATOR =
            new Creator<PackageSetPolicyValue>() {
                @Override
                public StringSetPolicyValue createFromParcel(Parcel source) {
                    return new StringSetPolicyValue(source);
                public PackageSetPolicyValue createFromParcel(Parcel source) {
                    return new PackageSetPolicyValue(source);
                }

                @Override
                public StringSetPolicyValue[] newArray(int size) {
                    return new StringSetPolicyValue[size];
                public PackageSetPolicyValue[] newArray(int size) {
                    return new PackageSetPolicyValue[size];
                }
            };
}
+10 −8
Original line number Diff line number Diff line
@@ -349,8 +349,8 @@ import android.app.admin.PolicyValue;
import android.app.admin.PreferentialNetworkServiceConfig;
import android.app.admin.SecurityLog;
import android.app.admin.SecurityLog.SecurityEvent;
import android.app.admin.PackageSetPolicyValue;
import android.app.admin.StartInstallingUpdateCallback;
import android.app.admin.StringSetPolicyValue;
import android.app.admin.SystemUpdateInfo;
import android.app.admin.SystemUpdatePolicy;
import android.app.admin.UnsafeStateException;
@@ -12073,7 +12073,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                mDevicePolicyEngine.setLocalPolicy(
                        PolicyDefinition.PERMITTED_INPUT_METHODS,
                        admin,
                        new StringSetPolicyValue(new HashSet<>(packageList)),
                        new PackageSetPolicyValue(new HashSet<>(packageList)),
                        userId);
            }
        }
@@ -20358,12 +20358,12 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            mDevicePolicyEngine.setGlobalPolicy(
                    PolicyDefinition.USER_CONTROLLED_DISABLED_PACKAGES,
                    enforcingAdmin,
                    new StringSetPolicyValue(packages));
                    new PackageSetPolicyValue(packages));
        } else {
            mDevicePolicyEngine.setLocalPolicy(
                    PolicyDefinition.USER_CONTROLLED_DISABLED_PACKAGES,
                    enforcingAdmin,
                    new StringSetPolicyValue(packages),
                    new PackageSetPolicyValue(packages),
                    caller.getUserId());
        }
    }
@@ -24045,7 +24045,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                        mDevicePolicyEngine.setLocalPolicy(
                                PolicyDefinition.PERMITTED_INPUT_METHODS,
                                enforcingAdmin,
                                new StringSetPolicyValue(
                                new PackageSetPolicyValue(
                                        new HashSet<>(admin.permittedInputMethods)),
                                admin.getUserHandle().getIdentifier());
                    }
@@ -24054,7 +24054,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                        mDevicePolicyEngine.setLocalPolicy(
                                PolicyDefinition.PERMITTED_INPUT_METHODS,
                                enforcingAdmin,
                                new StringSetPolicyValue(
                                new PackageSetPolicyValue(
                                        new HashSet<>(admin.getParentActiveAdmin()
                                                .permittedInputMethods)),
                                getProfileParentId(admin.getUserHandle().getIdentifier()));
@@ -24110,12 +24110,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                        mDevicePolicyEngine.setGlobalPolicy(
                                PolicyDefinition.USER_CONTROLLED_DISABLED_PACKAGES,
                                enforcingAdmin,
                                new StringSetPolicyValue(new HashSet<>(admin.protectedPackages)));
                                new PackageSetPolicyValue(
                                        new HashSet<>(admin.protectedPackages)));
                    } else {
                        mDevicePolicyEngine.setLocalPolicy(
                                PolicyDefinition.USER_CONTROLLED_DISABLED_PACKAGES,
                                enforcingAdmin,
                                new StringSetPolicyValue(new HashSet<>(admin.protectedPackages)),
                                new PackageSetPolicyValue(
                                        new HashSet<>(admin.protectedPackages)),
                                admin.getUserHandle().getIdentifier());
                    }
                }
+4 −4
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package com.android.server.devicepolicy;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.admin.PolicyValue;
import android.app.admin.StringSetPolicyValue;
import android.app.admin.PackageSetPolicyValue;
import android.util.Log;

import com.android.modules.utils.TypedXmlPullParser;
@@ -30,7 +30,7 @@ import java.util.Objects;
import java.util.Set;

// TODO(scottjonathan): Replace with generic set implementation
final class StringSetPolicySerializer extends PolicySerializer<Set<String>> {
final class PackageSetPolicySerializer extends PolicySerializer<Set<String>> {
    private static final String ATTR_VALUES = "strings";
    private static final String ATTR_VALUES_SEPARATOR = ";";
    @Override
@@ -45,10 +45,10 @@ final class StringSetPolicySerializer extends PolicySerializer<Set<String>> {
    PolicyValue<Set<String>> readFromXml(TypedXmlPullParser parser) {
        String valuesStr = parser.getAttributeValue(/* namespace= */ null, ATTR_VALUES);
        if (valuesStr == null) {
            Log.e(DevicePolicyEngine.TAG, "Error parsing StringSet policy value.");
            Log.e(DevicePolicyEngine.TAG, "Error parsing PackageSet policy value.");
            return null;
        }
        Set<String> values = Set.of(valuesStr.split(ATTR_VALUES_SEPARATOR));
        return new StringSetPolicyValue(values);
        return new PackageSetPolicyValue(values);
    }
}
+7 −6
Original line number Diff line number Diff line
@@ -18,14 +18,15 @@ package com.android.server.devicepolicy;

import android.annotation.NonNull;
import android.app.admin.PolicyValue;
import android.app.admin.StringSetPolicyValue;
import android.app.admin.PackageSetPolicyValue;
import android.app.admin.StringSetUnion;

import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Objects;
import java.util.Set;

final class StringSetUnion extends ResolutionMechanism<Set<String>> {
final class PackageSetUnion extends ResolutionMechanism<Set<String>> {

    @Override
    PolicyValue<Set<String>> resolve(
@@ -38,17 +39,17 @@ final class StringSetUnion extends ResolutionMechanism<Set<String>> {
        for (PolicyValue<Set<String>> policy : adminPolicies.values()) {
            unionOfPolicies.addAll(policy.getValue());
        }
        return new StringSetPolicyValue(unionOfPolicies);
        return new PackageSetPolicyValue(unionOfPolicies);
    }

    @Override
    android.app.admin.StringSetUnion getParcelableResolutionMechanism() {
        return new android.app.admin.StringSetUnion();
    StringSetUnion getParcelableResolutionMechanism() {
        return new StringSetUnion();
    }


    @Override
    public String toString() {
        return "SetUnion {}";
        return "PackageSetUnion {}";
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -162,9 +162,9 @@ final class PolicyDefinition<V> {
            new PolicyDefinition<>(
                    new NoArgsPolicyKey(
                            DevicePolicyIdentifiers.USER_CONTROL_DISABLED_PACKAGES_POLICY),
                    new StringSetUnion(),
                    new PackageSetUnion(),
                    PolicyEnforcerCallbacks::setUserControlDisabledPackages,
                    new StringSetPolicySerializer());
                    new PackageSetPolicySerializer());

    // This is saved in the static map sPolicyDefinitions so that we're able to reconstruct the
    // actual policy with the correct arguments (i.e. packageName) when reading the policies from
@@ -328,7 +328,7 @@ final class PolicyDefinition<V> {
            new MostRecent<>(),
            POLICY_FLAG_LOCAL_ONLY_POLICY | POLICY_FLAG_INHERITABLE,
            (Set<String> value, Context context, Integer userId, PolicyKey policyKey) -> true,
            new StringSetPolicySerializer());
            new PackageSetPolicySerializer());


    static PolicyDefinition<Boolean> SCREEN_CAPTURE_DISABLED = new PolicyDefinition<>(