aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChiao Cheng <chiaocheng@google.com>2013-07-23 07:18:24 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-07-23 07:18:24 -0700
commit13d744f2290a405bf99b1f8114da23668bd15274 (patch)
treede2e0910f5018f7be08c8fb6cfed3d5842153ea8
parent9c842fcf486ed5c70ca6db3106349aade27751bf (diff)
parent466d84110ef8f03b91561dd7a778558570e32abb (diff)
downloadContactsProvider-jb-mr1.1-dev.tar.gz
am 466d8411: am 8d54a6e0: resolved conflicts for merge of b8fb609b to jb-mr1-devjb-mr1.1-dev
* commit '466d84110ef8f03b91561dd7a778558570e32abb': Do not allow updates to the _data column.
-rw-r--r--src/com/android/providers/contacts/VoicemailContentTable.java20
-rw-r--r--src/com/android/providers/contacts/util/DbQueryUtils.java15
2 files changed, 32 insertions, 3 deletions
diff --git a/src/com/android/providers/contacts/VoicemailContentTable.java b/src/com/android/providers/contacts/VoicemailContentTable.java
index 3f00b262..dfa1e761 100644
--- a/src/com/android/providers/contacts/VoicemailContentTable.java
+++ b/src/com/android/providers/contacts/VoicemailContentTable.java
@@ -37,6 +37,7 @@ import android.util.Log;
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 @@ public class VoicemailContentTable implements VoicemailTable.Delegate {
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 @@ public class VoicemailContentTable implements VoicemailTable.Delegate {
@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 c184613f..d719313a 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.database.DatabaseUtils;
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 @@ public class DbQueryUtils {
/**
* 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);
}
}
}