summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/ContentProvider.java9
1 files changed, 7 insertions, 2 deletions
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 87fb84331af3..c25b5e874ab0 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -61,6 +61,7 @@ import android.os.storage.StorageManager;
import android.permission.PermissionCheckerManager;
import android.provider.MediaStore;
import android.text.TextUtils;
+import android.util.ArraySet;
import android.util.Log;
import android.util.SparseBooleanArray;
@@ -486,6 +487,8 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall
validateIncomingAuthority(authority);
int numOperations = operations.size();
final int[] userIds = new int[numOperations];
+ final ArraySet<String> readPermissions = new ArraySet<String>();
+ final ArraySet<String> writePermissions = new ArraySet<String>();
for (int i = 0; i < numOperations; i++) {
ContentProviderOperation operation = operations.get(i);
Uri uri = operation.getUri();
@@ -499,17 +502,19 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall
}
final AttributionSource accessAttributionSource =
attributionSource;
- if (operation.isReadOperation()) {
+ if (operation.isReadOperation() && !readPermissions.contains(uri.toString())) {
if (enforceReadPermission(accessAttributionSource, uri)
!= PermissionChecker.PERMISSION_GRANTED) {
throw new OperationApplicationException("App op not allowed", 0);
}
+ readPermissions.add(uri.toString());
}
- if (operation.isWriteOperation()) {
+ if (operation.isWriteOperation() && !writePermissions.contains(uri.toString())) {
if (enforceWritePermission(accessAttributionSource, uri)
!= PermissionChecker.PERMISSION_GRANTED) {
throw new OperationApplicationException("App op not allowed", 0);
}
+ writePermissions.add(uri.toString());
}
}
traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "applyBatch: ", authority);