Fix NPE when querying EF Uri with non-existent subscription
Bug: 194910795
Test: atest TeleServiceTests:SimPhonebookProviderTest
Change-Id: Ic214b46600759e2c73a90bc50ef971d80303055d
diff --git a/src/com/android/phone/SimPhonebookProvider.java b/src/com/android/phone/SimPhonebookProvider.java
index b921398..5188d96 100644
--- a/src/com/android/phone/SimPhonebookProvider.java
+++ b/src/com/android/phone/SimPhonebookProvider.java
@@ -16,8 +16,8 @@
package com.android.phone;
-import static com.android.internal.telephony.IccProvider.STR_NEW_TAG;
import static com.android.internal.telephony.IccProvider.STR_NEW_NUMBER;
+import static com.android.internal.telephony.IccProvider.STR_NEW_TAG;
import android.Manifest;
import android.annotation.TestApi;
@@ -305,8 +305,10 @@
MatrixCursor result = new MatrixCursor(projection);
try {
- addEfToCursor(
- result, getActiveSubscriptionInfo(args.subscriptionId), args.efType);
+ SubscriptionInfo info = getActiveSubscriptionInfo(args.subscriptionId);
+ if (info != null) {
+ addEfToCursor(result, info, args.efType);
+ }
} catch (RemoteException e) {
// Return an empty cursor. If service to access it is throwing remote
// exceptions then it's basically the same as not having a SIM.
@@ -734,6 +736,7 @@
}
}
+ @Nullable
private SubscriptionInfo getActiveSubscriptionInfo(int subId) {
// Getting the SubscriptionInfo requires READ_PHONE_STATE.
CallingIdentity identity = clearCallingIdentity();
diff --git a/tests/src/com/android/phone/SimPhonebookProviderTest.java b/tests/src/com/android/phone/SimPhonebookProviderTest.java
index 8e7ce25..4d901ed 100644
--- a/tests/src/com/android/phone/SimPhonebookProviderTest.java
+++ b/tests/src/com/android/phone/SimPhonebookProviderTest.java
@@ -235,6 +235,19 @@
}
@Test
+ public void query_elementaryFilesItem_nonExistentSubscriptionId_returnsEmptyCursor() {
+ setupSimsWithSubscriptionIds(1);
+ mIccPhoneBook.makeAllEfsSupported(1);
+
+ // Subscription ID 2 does not exist
+ Uri nonExistentElementaryFileItemUri = ElementaryFiles.getItemUri(2, EF_ADN);
+
+ try (Cursor cursor = mResolver.query(nonExistentElementaryFileItemUri, null, null, null)) {
+ assertThat(Objects.requireNonNull(cursor)).hasCount(0);
+ }
+ }
+
+ @Test
public void query_adnRecords_returnsCursorWithMatchingProjection() {
setupSimsWithSubscriptionIds(1);
mIccPhoneBook.makeAllEfsSupported(1);