Check granted permissions for all paths
b/9604671
b/10345049
b/11380658
Change-Id: Ifa4db10261f39e5af5fe84902f7221075a78bad3
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index 9739893..98ba797 100755
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -4602,10 +4602,13 @@
throw new IllegalArgumentException("Unable to resolve canonical path for " + file, e);
}
+ Context c = getContext();
+ boolean readGranted =
+ (c.checkCallingOrSelfUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ == PackageManager.PERMISSION_GRANTED);
+
if (path.startsWith(sExternalPath) || path.startsWith(sLegacyPath)) {
- Context c = getContext();
- if (c.checkCallingOrSelfUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
- != PackageManager.PERMISSION_GRANTED) {
+ if (!readGranted) {
c.enforceCallingOrSelfPermission(
READ_EXTERNAL_STORAGE, "External path: " + path);
}
@@ -4619,15 +4622,19 @@
}
} else if (path.startsWith(sCachePath)) {
- getContext().enforceCallingOrSelfPermission(
- ACCESS_CACHE_FILESYSTEM, "Cache path: " + path);
+ if (!readGranted) {
+ c.enforceCallingOrSelfPermission(
+ ACCESS_CACHE_FILESYSTEM, "Cache path: " + path);
+ }
} else if (isWrite) {
// don't write to non-cache, non-sdcard files.
throw new FileNotFoundException("Can't access " + file);
} else if (isSecondaryExternalPath(path)) {
// read access is OK with the appropriate permission
- getContext().enforceCallingOrSelfPermission(
- READ_EXTERNAL_STORAGE, "External path: " + path);
+ if (!readGranted) {
+ c.enforceCallingOrSelfPermission(
+ READ_EXTERNAL_STORAGE, "External path: " + path);
+ }
} else {
checkWorldReadAccess(path);
}