Loading core/java/android/content/pm/parsing/component/ParsedAttribution.java +1 −1 Original line number Diff line number Diff line Loading @@ -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; Loading services/core/java/com/android/server/appop/AppOpsService.java +38 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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; Loading Loading @@ -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. * Loading Loading
core/java/android/content/pm/parsing/component/ParsedAttribution.java +1 −1 Original line number Diff line number Diff line Loading @@ -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; Loading
services/core/java/com/android/server/appop/AppOpsService.java +38 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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; Loading Loading @@ -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. * Loading