diff options
author | Jay Shrauner <shrauner@google.com> | 2014-01-27 17:06:27 -0800 |
---|---|---|
committer | Jay Shrauner <shrauner@google.com> | 2014-03-01 20:10:12 +0000 |
commit | 9b9dacbbb2353f3415fb70cc1ae8b2e9152e4ecb (patch) | |
tree | 48db7de06b32b3ab8353dd05f67f9af4c031aae7 | |
parent | 49a9c120b0b6e3942bc950143f1e2970c8ff374a (diff) | |
download | android_packages_apps_Contacts-9b9dacbbb2353f3415fb70cc1ae8b2e9152e4ecb.tar.gz android_packages_apps_Contacts-9b9dacbbb2353f3415fb70cc1ae8b2e9152e4ecb.tar.bz2 android_packages_apps_Contacts-9b9dacbbb2353f3415fb70cc1ae8b2e9152e4ecb.zip |
Fix potential NPE with null cursor
Detect and handle null cursors returned from CP2 queries.
Bug:12767708
Change-Id: I1571463b80e5b85656fe119c6bc83de36be30c7f
(cherry picked from commit 13c42f4ebb1c7f31750262946ce3b390c93d5320)
3 files changed, 33 insertions, 23 deletions
diff --git a/src/com/android/contacts/SplitAggregateView.java b/src/com/android/contacts/SplitAggregateView.java index 6e3854955..2281ec6ff 100644 --- a/src/com/android/contacts/SplitAggregateView.java +++ b/src/com/android/contacts/SplitAggregateView.java @@ -157,6 +157,9 @@ public class SplitAggregateView extends ListView { Uri dataUri = Uri.withAppendedPath(mAggregateUri, Data.CONTENT_DIRECTORY); Cursor cursor = getContext().getContentResolver().query(dataUri, SplitQuery.COLUMNS, null, null, null); + if (cursor == null) { + return Collections.emptyList(); + } try { while (cursor.moveToNext()) { long rawContactId = cursor.getLong(SplitQuery.RAW_CONTACT_ID); diff --git a/src/com/android/contacts/editor/AggregationSuggestionEngine.java b/src/com/android/contacts/editor/AggregationSuggestionEngine.java index 2f77858c5..f121605ad 100644 --- a/src/com/android/contacts/editor/AggregationSuggestionEngine.java +++ b/src/com/android/contacts/editor/AggregationSuggestionEngine.java @@ -300,6 +300,9 @@ public class AggregationSuggestionEngine extends HandlerThread { private void loadAggregationSuggestions(Uri uri) { ContentResolver contentResolver = mContext.getContentResolver(); Cursor cursor = contentResolver.query(uri, new String[]{Contacts._ID}, null, null, null); + if (cursor == null) { + return; + } try { // If a new request is pending, chuck the result of the previous request if (getHandler().hasMessages(MESSAGE_NAME_CHANGE)) { @@ -324,7 +327,9 @@ public class AggregationSuggestionEngine extends HandlerThread { Cursor dataCursor = contentResolver.query(Data.CONTENT_URI, DataQuery.COLUMNS, sb.toString(), null, Data.CONTACT_ID); - mMainHandler.sendMessage(mMainHandler.obtainMessage(MESSAGE_DATA_CURSOR, dataCursor)); + if (dataCursor != null) { + mMainHandler.sendMessage(mMainHandler.obtainMessage(MESSAGE_DATA_CURSOR, dataCursor)); + } } finally { cursor.close(); } diff --git a/src/com/android/contacts/group/SuggestedMemberListAdapter.java b/src/com/android/contacts/group/SuggestedMemberListAdapter.java index 067c052e8..6d60a3ee7 100644 --- a/src/com/android/contacts/group/SuggestedMemberListAdapter.java +++ b/src/com/android/contacts/group/SuggestedMemberListAdapter.java @@ -263,31 +263,33 @@ public class SuggestedMemberListAdapter extends ArrayAdapter<SuggestedMember> { "=?) AND " + rawContactIdSelectionBuilder.toString(), selectionArgs.toArray(new String[0]), null); - try { - memberDataCursor.moveToPosition(-1); - while (memberDataCursor.moveToNext()) { - long rawContactId = memberDataCursor.getLong(RAW_CONTACT_ID_COLUMN_INDEX); - SuggestedMember member = suggestionsMap.get(rawContactId); - if (member == null) { - continue; - } - String mimetype = memberDataCursor.getString(MIMETYPE_COLUMN_INDEX); - if (Photo.CONTENT_ITEM_TYPE.equals(mimetype)) { - // Set photo - byte[] bitmapArray = memberDataCursor.getBlob(PHOTO_COLUMN_INDEX); - member.setPhotoByteArray(bitmapArray); - } else if (Email.CONTENT_ITEM_TYPE.equals(mimetype) || - Phone.CONTENT_ITEM_TYPE.equals(mimetype)) { - // Set at most 1 extra piece of contact info that can be a phone number or - // email - if (!member.hasExtraInfo()) { - String info = memberDataCursor.getString(DATA_COLUMN_INDEX); - member.setExtraInfo(info); + if (memberDataCursor != null) { + try { + memberDataCursor.moveToPosition(-1); + while (memberDataCursor.moveToNext()) { + long rawContactId = memberDataCursor.getLong(RAW_CONTACT_ID_COLUMN_INDEX); + SuggestedMember member = suggestionsMap.get(rawContactId); + if (member == null) { + continue; + } + String mimetype = memberDataCursor.getString(MIMETYPE_COLUMN_INDEX); + if (Photo.CONTENT_ITEM_TYPE.equals(mimetype)) { + // Set photo + byte[] bitmapArray = memberDataCursor.getBlob(PHOTO_COLUMN_INDEX); + member.setPhotoByteArray(bitmapArray); + } else if (Email.CONTENT_ITEM_TYPE.equals(mimetype) || + Phone.CONTENT_ITEM_TYPE.equals(mimetype)) { + // Set at most 1 extra piece of contact info that can be a phone number or + // email + if (!member.hasExtraInfo()) { + String info = memberDataCursor.getString(DATA_COLUMN_INDEX); + member.setExtraInfo(info); + } } } + } finally { + memberDataCursor.close(); } - } finally { - memberDataCursor.close(); } results.values = suggestionsList; return results; |