summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2013-12-13 09:52:44 -0800
committerMarco Nelissen <marcone@google.com>2013-12-13 10:09:28 -0800
commitc72ec166dbe14db3a78a2cd9c0dbbe583a6b7021 (patch)
treedfffb00d1551a8c2347757697b84f179e1e9bec6 /src
parentf60aae6c0a24263f5045051024357ea4236769de (diff)
downloadandroid_packages_providers_MediaProvider-c72ec166dbe14db3a78a2cd9c0dbbe583a6b7021.tar.gz
android_packages_providers_MediaProvider-c72ec166dbe14db3a78a2cd9c0dbbe583a6b7021.tar.bz2
android_packages_providers_MediaProvider-c72ec166dbe14db3a78a2cd9c0dbbe583a6b7021.zip
Fix cache permission check, avoid double checks
Change-Id: Ic3f9799147b3f12c71fd824da9de51e264b70488
Diffstat (limited to 'src')
-rwxr-xr-xsrc/com/android/providers/media/MediaProvider.java29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index 0bc256ad..33dd425e 100755
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -4624,28 +4624,31 @@ public class MediaProvider extends ContentProvider {
}
Context c = getContext();
- boolean readGranted =
+ boolean readGranted = false;
+ boolean writeGranted = false;
+ if (isWrite) {
+ writeGranted =
+ (c.checkCallingOrSelfUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
+ == PackageManager.PERMISSION_GRANTED);
+ } else {
+ readGranted =
(c.checkCallingOrSelfUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
== PackageManager.PERMISSION_GRANTED);
+ }
if (path.startsWith(sExternalPath) || path.startsWith(sLegacyPath)) {
- if (!readGranted) {
- c.enforceCallingOrSelfPermission(
- READ_EXTERNAL_STORAGE, "External path: " + path);
- }
-
if (isWrite) {
- if (c.checkCallingOrSelfUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
- != PackageManager.PERMISSION_GRANTED) {
+ if (!writeGranted) {
c.enforceCallingOrSelfPermission(
- WRITE_EXTERNAL_STORAGE, "External path: " + path);
+ WRITE_EXTERNAL_STORAGE, "External path: " + path);
}
+ } else if (!readGranted) {
+ c.enforceCallingOrSelfPermission(
+ READ_EXTERNAL_STORAGE, "External path: " + path);
}
-
} else if (path.startsWith(sCachePath)) {
- if (!readGranted) {
- c.enforceCallingOrSelfPermission(
- ACCESS_CACHE_FILESYSTEM, "Cache path: " + path);
+ if ((isWrite && !writeGranted) || !readGranted) {
+ c.enforceCallingOrSelfPermission(ACCESS_CACHE_FILESYSTEM, "Cache path: " + path);
}
} else if (isWrite) {
// don't write to non-cache, non-sdcard files.