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

Commit 4208b31b authored by Kiran Ramachandra's avatar Kiran Ramachandra Committed by Android Build Coastguard Worker
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
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:6219cbabc1e6eaefc0e3eab1e10f0d986d3ed546)
Merged-In: Ib9cd2864cc948238465ea59dbda4db0d9a75df29
Change-Id: Ib9cd2864cc948238465ea59dbda4db0d9a75df29
parent 91ddcd5c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ public class ParsedAttribution implements Parcelable {
    public static final int MAX_ATTRIBUTION_TAG_LEN = 50;

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

    /** Tag of the attribution */
    public final @NonNull String tag;
+38 −0
Original line number Diff line number Diff line
@@ -3436,6 +3436,10 @@ public class AppOpsService extends IAppOpsService.Stub {
            return new SyncNotedAppOp(AppOpsManager.MODE_ERRORED, code, attributionTag,
                    packageName);
        }
        if (proxyAttributionTag != null
                && !isAttributionTagDefined(packageName, proxyPackageName, proxyAttributionTag)) {
            proxyAttributionTag = null;
        }

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

        boolean isRestricted = false;
        int startType = START_TYPE_FAILED;
@@ -4644,6 +4652,36 @@ public class AppOpsService extends IAppOpsService.Stub {
        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.
     *