diff options
author | Chiao Cheng <chiaocheng@google.com> | 2013-07-23 07:18:24 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-07-23 07:18:24 -0700 |
commit | 13d744f2290a405bf99b1f8114da23668bd15274 (patch) | |
tree | de2e0910f5018f7be08c8fb6cfed3d5842153ea8 | |
parent | 9c842fcf486ed5c70ca6db3106349aade27751bf (diff) | |
parent | 466d84110ef8f03b91561dd7a778558570e32abb (diff) | |
download | ContactsProvider-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.java | 20 | ||||
-rw-r--r-- | src/com/android/providers/contacts/util/DbQueryUtils.java | 15 |
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); } } } |