summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2018-08-28 15:40:10 -0700
committerMakoto Onuki <omakoto@google.com>2018-08-28 15:57:48 -0700
commit2cc250b651b67a0aa76c3ed4375a6b40d9ebbdb9 (patch)
tree76eb60529e9e30e150796691aae051de3abb37f3 /core/java
parent0886e9092196fca659576db1be95ee0db04606f3 (diff)
ContentResolver: Always set calling package name
Change-Id: I170fba7df8422c68d42c22eb5953b7a47f6c95d5 Fixes: 112306907 Test: atest CtsContentTestCases
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/content/ContentProvider.java21
1 files changed, 17 insertions, 4 deletions
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 085d77d5c1cd..f5339efb8d60 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -236,9 +236,15 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
// However, the caller may be expecting to access them my index. Hence,
// we have to execute the query as if allowed to get a cursor with the
// columns. We then use the column names to return an empty cursor.
- Cursor cursor = ContentProvider.this.query(
- uri, projection, queryArgs,
- CancellationSignal.fromTransport(cancellationSignal));
+ Cursor cursor;
+ final String original = setCallingPackage(callingPkg);
+ try {
+ cursor = ContentProvider.this.query(
+ uri, projection, queryArgs,
+ CancellationSignal.fromTransport(cancellationSignal));
+ } finally {
+ setCallingPackage(original);
+ }
if (cursor == null) {
return null;
}
@@ -260,6 +266,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
@Override
public String getType(Uri uri) {
+ // getCallingPackage() isn't available in getType(), as the javadoc states.
validateIncomingUri(uri);
uri = maybeGetUriWithoutUserId(uri);
Trace.traceBegin(TRACE_TAG_DATABASE, "getType");
@@ -276,7 +283,12 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
int userId = getUserIdFromUri(uri);
uri = maybeGetUriWithoutUserId(uri);
if (enforceWritePermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) {
- return rejectInsert(uri, initialValues);
+ final String original = setCallingPackage(callingPkg);
+ try {
+ return rejectInsert(uri, initialValues);
+ } finally {
+ setCallingPackage(original);
+ }
}
Trace.traceBegin(TRACE_TAG_DATABASE, "insert");
final String original = setCallingPackage(callingPkg);
@@ -440,6 +452,7 @@ public abstract class ContentProvider implements ComponentCallbacks2 {
@Override
public String[] getStreamTypes(Uri uri, String mimeTypeFilter) {
+ // getCallingPackage() isn't available in getType(), as the javadoc states.
validateIncomingUri(uri);
uri = maybeGetUriWithoutUserId(uri);
Trace.traceBegin(TRACE_TAG_DATABASE, "getStreamTypes");