diff options
| author | 2015-04-27 17:00:44 -0700 | |
|---|---|---|
| committer | 2015-04-28 00:04:00 +0000 | |
| commit | a2147ec975016f2aa1e44e5ed6c754a36ce1a074 (patch) | |
| tree | 673b304c699dc9ad49f2da2f97d9b2ac6979baa5 | |
| parent | 1ce80dc0e21268475ae9f5d8ec8e0c114687de54 (diff) | |
Handle null projection properly if provider app op is not enabled.
Change-Id: I00b757ef73bf4dd58217ba748520c3504350d4ba
| -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 fd65d56abb1a..72e701ddb16b 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 {  |