diff options
author | Marco Nelissen <marcone@google.com> | 2013-12-13 09:52:44 -0800 |
---|---|---|
committer | Marco Nelissen <marcone@google.com> | 2013-12-13 10:09:28 -0800 |
commit | c72ec166dbe14db3a78a2cd9c0dbbe583a6b7021 (patch) | |
tree | dfffb00d1551a8c2347757697b84f179e1e9bec6 /src | |
parent | f60aae6c0a24263f5045051024357ea4236769de (diff) | |
download | android_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-x | src/com/android/providers/media/MediaProvider.java | 29 |
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. |