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

Commit 74705358 authored by Kiran Ramachandra's avatar Kiran Ramachandra Committed by Mohammed Althaf T
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:d9dc82face08025e6ccacb0ac6f7266fce5d2ea6)
Merged-In: Ib9cd2864cc948238465ea59dbda4db0d9a75df29
Change-Id: Ib9cd2864cc948238465ea59dbda4db0d9a75df29
parent 2038da93
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.
     *