Merge "Validate projection for SimPhonebookContract.SimRecords queries"
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 4d901ed..848ba42 100644
--- a/tests/src/com/android/phone/SimPhonebookProviderTest.java
+++ b/tests/src/com/android/phone/SimPhonebookProviderTest.java
@@ -57,6 +57,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;
@@ -289,6 +290,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);