diff options
author | Chiao Cheng <chiaocheng@google.com> | 2013-07-23 07:27:27 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-07-23 07:27:27 -0700 |
commit | e2688b18df75eceb4895fecaaf4f0ebd42f23ef7 (patch) | |
tree | 5e3caebf0cd56d686ed730a24f4ba0da9ab89777 | |
parent | fb0de59840d0b8bb5b27ee838de60855474d209d (diff) | |
parent | 44c3d51be8deee28d01e3e3f739a2f6b1fc608fa (diff) | |
download | ContactsProvider-e2688b18df75eceb4895fecaaf4f0ebd42f23ef7.tar.gz |
am 44c3d51b: am 13d744f2: am 466d8411: am 8d54a6e0: resolved conflicts for merge of b8fb609b to jb-mr1-devandroid-4.3_r3.1android-4.3_r3android-4.3.1_r1jb-mr2.0.0-release
* commit '44c3d51be8deee28d01e3e3f739a2f6b1fc608fa':
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); } } } |