diff options
author | Makoto Onuki <omakoto@google.com> | 2015-06-16 12:51:42 -0700 |
---|---|---|
committer | Makoto Onuki <omakoto@google.com> | 2015-06-16 13:25:26 -0700 |
commit | 3edc78c78ba277b116c28fde9b8759cb18f03e1e (patch) | |
tree | 27f6fab01d441332cfaea10690d88f4e2d01301e | |
parent | 3ad4f2e72b677e3f7936af17f831bf6cdd95aa69 (diff) | |
download | ContactsProvider-3edc78c78ba277b116c28fde9b8759cb18f03e1e.tar.gz |
Guard against directory provider crash
Bug 21724632
Change-Id: I69765a4a4a416aeaa4563520526811ae019392a1
-rw-r--r-- | src/com/android/providers/contacts/ContactsProvider2.java | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java index 886bc94e..78355898 100644 --- a/src/com/android/providers/contacts/ContactsProvider2.java +++ b/src/com/android/providers/contacts/ContactsProvider2.java @@ -3548,7 +3548,8 @@ public class ContactsProvider2 extends AbstractContactsProvider args[0] = String.valueOf(contactId); args[1] = Uri.encode(lookupKey); lookupQb.appendWhere(Contacts._ID + "=? AND " + Contacts.LOOKUP_KEY + "=?"); - Cursor c = query(db, lookupQb, null, selection, args, null, null, null, null, null); + Cursor c = doQuery(db, lookupQb, null, selection, args, null, null, null, null, + null); try { if (c.getCount() == 1) { // Contact was unmodified so go ahead and delete it. @@ -5105,9 +5106,15 @@ public class ContactsProvider2 extends AbstractContactsProvider projection = getDefaultProjection(uri); } - Cursor cursor = getContext().getContentResolver().query( - directoryUri, projection, selection, selectionArgs, sortOrder); - if (cursor == null) { + Cursor cursor; + try { + cursor = getContext().getContentResolver().query( + directoryUri, projection, selection, selectionArgs, sortOrder); + if (cursor == null) { + return null; + } + } catch (RuntimeException e) { + Log.w(TAG, "Directory query failed: uri=" + uri, e); return null; } @@ -6263,7 +6270,7 @@ public class ContactsProvider2 extends AbstractContactsProvider // phone_number_compare_loose. qb.setStrict(true); boolean foundResult = false; - Cursor cursor = query(db, qb, projectionWithNumber, selection, selectionArgs, + Cursor cursor = doQuery(db, qb, projectionWithNumber, selection, selectionArgs, sortOrder, groupBy, null, limit, cancellationSignal); try { if (cursor.getCount() > 0) { @@ -6282,7 +6289,7 @@ public class ContactsProvider2 extends AbstractContactsProvider // numbers mDbHelper.get().buildFallbackPhoneLookupAndContactQuery(qb, number); - final Cursor fallbackCursor = query(db, qb, projectionWithNumber, + final Cursor fallbackCursor = doQuery(db, qb, projectionWithNumber, selection, selectionArgs, sortOrder, groupBy, having, limit, cancellationSignal); return PhoneLookupWithStarPrefix.removeNonStarMatchesFromCursor( @@ -6507,8 +6514,8 @@ public class ContactsProvider2 extends AbstractContactsProvider // Auto-rewrite SORT_KEY_{PRIMARY, ALTERNATIVE} sort orders. String localizedSortOrder = getLocalizedSortOrder(sortOrder); Cursor cursor = - query(db, qb, projection, selection, selectionArgs, localizedSortOrder, groupBy, - having, limit, cancellationSignal); + doQuery(db, qb, projection, selection, selectionArgs, localizedSortOrder, groupBy, + having, limit, cancellationSignal); if (readBooleanQueryParameter(uri, Contacts.EXTRA_ADDRESS_BOOK_INDEX, false)) { bundleFastScrollingIndexExtras(cursor, uri, db, qb, selection, @@ -6549,7 +6556,7 @@ public class ContactsProvider2 extends AbstractContactsProvider return localizedSortOrder; } - private Cursor query(final SQLiteDatabase db, SQLiteQueryBuilder qb, String[] projection, + private Cursor doQuery(final SQLiteDatabase db, SQLiteQueryBuilder qb, String[] projection, String selection, String[] selectionArgs, String sortOrder, String groupBy, String having, String limit, CancellationSignal cancellationSignal) { if (projection != null && projection.length == 1 @@ -6864,7 +6871,7 @@ public class ContactsProvider2 extends AbstractContactsProvider args[0] = String.valueOf(contactId); args[1] = Uri.encode(lookupKey); lookupQb.appendWhere(contactIdColumn + "=? AND " + lookupKeyColumn + "=?"); - Cursor c = query(db, lookupQb, projection, selection, args, sortOrder, + Cursor c = doQuery(db, lookupQb, projection, selection, args, sortOrder, groupBy, null, limit, cancellationSignal); if (c.getCount() != 0) { return c; |