am 466d8411: am 8d54a6e0: resolved conflicts for merge of b8fb609b to jb-mr1-dev
* commit '466d84110ef8f03b91561dd7a778558570e32abb':
Do not allow updates to the _data column.
diff --git a/src/com/android/providers/contacts/VoicemailContentTable.java b/src/com/android/providers/contacts/VoicemailContentTable.java
index 3f00b26..dfa1e76 100644
--- a/src/com/android/providers/contacts/VoicemailContentTable.java
+++ b/src/com/android/providers/contacts/VoicemailContentTable.java
@@ -37,6 +37,7 @@
import com.android.common.content.ProjectionMap;
import com.android.providers.contacts.VoicemailContentProvider.UriData;
import com.android.providers.contacts.util.CloseUtils;
+import com.google.common.collect.ImmutableSet;
import java.io.File;
import java.io.FileNotFoundException;
@@ -54,6 +55,21 @@
private static final String[] FILENAME_ONLY_PROJECTION = new String[] { Voicemails._DATA };
+ private static final ImmutableSet<String> ALLOWED_COLUMNS = new ImmutableSet.Builder<String>()
+ .add(Voicemails._ID)
+ .add(Voicemails.NUMBER)
+ .add(Voicemails.DATE)
+ .add(Voicemails.DURATION)
+ .add(Voicemails.IS_READ)
+ .add(Voicemails.STATE)
+ .add(Voicemails.SOURCE_DATA)
+ .add(Voicemails.SOURCE_PACKAGE)
+ .add(Voicemails.HAS_CONTENT)
+ .add(Voicemails.MIME_TYPE)
+ .add(OpenableColumns.DISPLAY_NAME)
+ .add(OpenableColumns.SIZE)
+ .build();
+
private final String mTableName;
private final SQLiteOpenHelper mDbHelper;
private final Context mContext;
@@ -211,8 +227,10 @@
@Override
public int update(UriData uriData, ContentValues values, String selection,
String[] selectionArgs) {
- checkForSupportedColumns(mVoicemailProjectionMap, values);
+
+ checkForSupportedColumns(ALLOWED_COLUMNS, values, "Updates are not allowed.");
checkUpdateSupported(uriData);
+
final SQLiteDatabase db = mDbHelper.getWritableDatabase();
// TODO: This implementation does not allow bulk update because it only accepts
// URI that include message Id. I think we do want to support bulk update.
diff --git a/src/com/android/providers/contacts/util/DbQueryUtils.java b/src/com/android/providers/contacts/util/DbQueryUtils.java
index c184613..d719313 100644
--- a/src/com/android/providers/contacts/util/DbQueryUtils.java
+++ b/src/com/android/providers/contacts/util/DbQueryUtils.java
@@ -20,6 +20,7 @@
import android.text.TextUtils;
import java.util.HashMap;
+import java.util.Set;
/**
* Static methods for helping us build database query selection strings.
@@ -83,14 +84,24 @@
/**
* Checks if the given ContentValues contains values within the projection
* map.
+ *
* @throws IllegalArgumentException if any value in values is not found in
* the projection map.
*/
public static void checkForSupportedColumns(HashMap<String, String> projectionMap,
ContentValues values) {
+ checkForSupportedColumns(projectionMap.keySet(), values, "Is invalid.");
+ }
+
+ /**
+ * @see #checkForSupportedColumns(HashMap, ContentValues)
+ */
+ public static void checkForSupportedColumns(Set<String> allowedColumns, ContentValues values,
+ String msgSuffix) {
for (String requestedColumn : values.keySet()) {
- if (!projectionMap.keySet().contains(requestedColumn)) {
- throw new IllegalArgumentException("Column '" + requestedColumn + "' is invalid.");
+ if (!allowedColumns.contains(requestedColumn)) {
+ throw new IllegalArgumentException("Column '" + requestedColumn + "'. " +
+ msgSuffix);
}
}
}