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

Commit 63d122cf authored by Kiran Ramachandra's avatar Kiran Ramachandra
Browse files

RESTRICT AUTOMERGE Added limitations for attributions to handle invalid cases

Bug: 304983146
Test: Modified and introduced new tests to verify change -> atest CtsAppOpsTestCases:AttributionTest
Change-Id: Iee26fdb9cf1ca0fa8905e22732c32ec7d9b80fea
parent 33cecbe1
Loading
Loading
Loading
Loading
+38 −0
Original line number Original line Diff line number Diff line
@@ -3460,6 +3460,10 @@ public class AppOpsService extends IAppOpsService.Stub {
            return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
            return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
                    packageName);
                    packageName);
        }
        }
        if (proxyAttributionTag != null
                && !isAttributionTagDefined(packageName, proxyPackageName, proxyAttributionTag)) {
            proxyAttributionTag = null;
        }


        synchronized (this) {
        synchronized (this) {
            final Ops ops = getOpsLocked(uid, packageName, attributionTag,
            final Ops ops = getOpsLocked(uid, packageName, attributionTag,
@@ -3974,6 +3978,10 @@ public class AppOpsService extends IAppOpsService.Stub {
            return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
            return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
                    packageName);
                    packageName);
        }
        }
        if (proxyAttributionTag != null
                && !isAttributionTagDefined(packageName, proxyPackageName, proxyAttributionTag)) {
            proxyAttributionTag = null;
        }


        boolean isRestricted = false;
        boolean isRestricted = false;
        int startType = START_TYPE_FAILED;
        int startType = START_TYPE_FAILED;
@@ -4714,6 +4722,36 @@ public class AppOpsService extends IAppOpsService.Stub {
        return false;
        return false;
    }
    }


    /**
     * Checks to see if the attribution tag is defined in either package or proxyPackage.
     * This method is intended for ProxyAttributionTag validation and returns false
     * if it does not exist in either one of them.
     *
     * @param packageName Name of the package
     * @param proxyPackageName Name of the proxy package
     * @param attributionTag attribution tag to be checked
     *
     * @return boolean specifying if attribution tag is valid or not
     */
    private boolean isAttributionTagDefined(@Nullable String packageName,
                                            @Nullable String proxyPackageName,
                                            @Nullable String attributionTag) {
        if (packageName == null) {
            return false;
        } else if (attributionTag == null) {
            return true;
        }
        PackageManagerInternal pmInt = LocalServices.getService(PackageManagerInternal.class);
        if (proxyPackageName != null) {
            AndroidPackage proxyPkg = pmInt.getPackage(proxyPackageName);
            if (proxyPkg != null && isAttributionInPackage(proxyPkg, attributionTag)) {
                return true;
            }
        }
        AndroidPackage pkg = pmInt.getPackage(packageName);
        return isAttributionInPackage(pkg, attributionTag);
    }

    /**
    /**
     * Get (and potentially create) ops.
     * Get (and potentially create) ops.
     *
     *
+1 −1
Original line number Original line Diff line number Diff line
@@ -38,7 +38,7 @@ import java.util.List;
public class ParsedAttributionImpl implements ParsedAttribution, Parcelable {
public class ParsedAttributionImpl implements ParsedAttribution, Parcelable {


    /** Maximum amount of attributions per package */
    /** Maximum amount of attributions per package */
    static final int MAX_NUM_ATTRIBUTIONS = 10000;
    static final int MAX_NUM_ATTRIBUTIONS = 1000;


    /** Tag of the attribution */
    /** Tag of the attribution */
    private @NonNull String tag;
    private @NonNull String tag;