From 6ab6373dea9c980c41c1cb1d5f59e0fd78bbf8a7 Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Wed, 30 Oct 2013 12:25:28 -0700 Subject: Check granted permissions for all paths b/9604671 b/10345049 b/11380658 Change-Id: Ifa4db10261f39e5af5fe84902f7221075a78bad3 --- src/com/android/providers/media/MediaProvider.java | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java index 97398932..98ba7978 100755 --- a/src/com/android/providers/media/MediaProvider.java +++ b/src/com/android/providers/media/MediaProvider.java @@ -4602,10 +4602,13 @@ public class MediaProvider extends ContentProvider { 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 @@ public class MediaProvider extends ContentProvider { } } 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); } -- cgit v1.2.3