Validate projection for SimPhonebookContract.SimRecords queries
Test: atest TeleServiceTests:SimPhonebookProviderTest
Bug: 197150770
Merged-In: I63138f81c58df3c2c2a1fd86da2a3ef0fe89a93d
Change-Id: I54b428669d6997410c4e70da51cf04c01df48c51
(cherry picked from commit 88bedac544f275dfb5ff3bde6cffd9d16ab3bfd2)
diff --git a/src/com/android/phone/SimPhonebookProvider.java b/src/com/android/phone/SimPhonebookProvider.java
index 5188d96..04c4f48 100644
--- a/src/com/android/phone/SimPhonebookProvider.java
+++ b/src/com/android/phone/SimPhonebookProvider.java
@@ -97,6 +97,8 @@
private static final String TAG = "SimPhonebookProvider";
private static final Set<String> ELEMENTARY_FILES_COLUMNS_SET =
ImmutableSet.copyOf(ELEMENTARY_FILES_ALL_COLUMNS);
+ private static final Set<String> SIM_RECORDS_COLUMNS_SET =
+ ImmutableSet.copyOf(SIM_RECORDS_ALL_COLUMNS);
private static final Set<String> SIM_RECORDS_WRITABLE_COLUMNS = ImmutableSet.of(
SimRecords.NAME, SimRecords.PHONE_NUMBER
);
@@ -355,6 +357,7 @@
}
private Cursor querySimRecords(PhonebookArgs args, String[] projection) {
+ validateProjection(SIM_RECORDS_COLUMNS_SET, projection);
validateSubscriptionAndEf(args);
if (projection == null) {
projection = SIM_RECORDS_ALL_COLUMNS;
@@ -409,6 +412,7 @@
}
private Cursor querySimRecordsItem(PhonebookArgs args, String[] projection) {
+ validateProjection(SIM_RECORDS_COLUMNS_SET, projection);
if (projection == null) {
projection = SIM_RECORDS_ALL_COLUMNS;
}
diff --git a/tests/src/com/android/phone/SimPhonebookProviderTest.java b/tests/src/com/android/phone/SimPhonebookProviderTest.java
index 53f8f1a..29a653d 100644
--- a/tests/src/com/android/phone/SimPhonebookProviderTest.java
+++ b/tests/src/com/android/phone/SimPhonebookProviderTest.java
@@ -56,6 +56,7 @@
import com.android.internal.telephony.uicc.IccConstants;
import com.google.common.collect.ImmutableList;
+import com.google.common.io.Closeables;
import com.google.common.truth.Correspondence;
import org.junit.Before;
@@ -288,6 +289,33 @@
}
@Test
+ public void query_adnRecords_invalidColumnProjection_throwsIllegalArgumentException() {
+ setupSimsWithSubscriptionIds(1);
+ mIccPhoneBook.makeAllEfsSupported(1);
+ Uri contentAdn = SimRecords.getContentUri(1, EF_ADN);
+
+ assertThrows(IllegalArgumentException.class, () -> Closeables.close(
+ mResolver.query(contentAdn, new String[] {
+ "an_unsupported_column",
+ }, null, null), false)
+ );
+
+ assertThrows(IllegalArgumentException.class, () -> Closeables.close(
+ mResolver.query(contentAdn, new String[] {
+ SimRecords.RECORD_NUMBER,
+ "an_unsupported_column"
+ }, null, null), false)
+ );
+
+ assertThrows(IllegalArgumentException.class, () -> Closeables.close(
+ mResolver.query(contentAdn, new String[] {
+ "an_unsupported_column",
+ SimRecords.RECORD_NUMBER
+ }, null, null), false)
+ );
+ }
+
+ @Test
public void query_adnRecords_noRecords_returnsEmptyCursor() {
setupSimsWithSubscriptionIds(1);
mIccPhoneBook.makeAllEfsSupported(1);