diff options
author | Svet Ganov <svetoslavganov@google.com> | 2015-04-27 17:00:44 -0700 |
---|---|---|
committer | Svetoslav Ganov <svetoslavganov@google.com> | 2015-04-28 00:04:00 +0000 |
commit | a2147ec975016f2aa1e44e5ed6c754a36ce1a074 (patch) | |
tree | 673b304c699dc9ad49f2da2f97d9b2ac6979baa5 /core/java/android | |
parent | 1ce80dc0e21268475ae9f5d8ec8e0c114687de54 (diff) | |
download | frameworks_base-a2147ec975016f2aa1e44e5ed6c754a36ce1a074.zip frameworks_base-a2147ec975016f2aa1e44e5ed6c754a36ce1a074.tar.gz frameworks_base-a2147ec975016f2aa1e44e5ed6c754a36ce1a074.tar.bz2 |
Handle null projection properly if provider app op is not enabled.
Change-Id: I00b757ef73bf4dd58217ba748520c3504350d4ba
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/content/ContentProvider.java | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java index fd65d56..72e701d 100644 --- a/core/java/android/content/ContentProvider.java +++ b/core/java/android/content/ContentProvider.java @@ -211,7 +211,27 @@ public abstract class ContentProvider implements ComponentCallbacks2 { // We do not call ContentProvider#query with a modified where clause since // the implementation is not guaranteed to be backed by a SQL database, hence // it may not handle properly the tautology where clause we would have created. - return new MatrixCursor(projection, 0); + if (projection != null) { + return new MatrixCursor(projection, 0); + } + + // Null projection means all columns but we have no idea which they are. + // 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, selection, + selectionArgs, sortOrder, CancellationSignal.fromTransport( + cancellationSignal)); + + // Create a projection for all columns. + final int columnCount = cursor.getCount(); + String[] allColumns = new String[columnCount]; + for (int i = 0; i < columnCount; i++) { + allColumns[i] = cursor.getColumnName(i); + } + + // Return an empty cursor for all columns. + return new MatrixCursor(allColumns, 0); } final String original = setCallingPackage(callingPkg); try { |