email: fix empty body update
Currently, body text and html are removed from the content values to be stored as files in the filesystem. This could lead to a IllegalArgumentException because we passed an empty content value to the update operation. We must ensure that we update at least one item. Related BUGDUMP-4037330 and http://forum.cyanogenmod.org/topic/112563-massive-data-use Change-Id: Ib9ba10eb2cb86598bef6e5f8bc11553d09fc4ef8 Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
This commit is contained in:
parent
ead5cd372c
commit
6adbdc9f6b
@ -2243,7 +2243,22 @@ public class EmailProvider extends ContentProvider
|
|||||||
updateValues.remove(BodyColumns.HTML_CONTENT);
|
updateValues.remove(BodyColumns.HTML_CONTENT);
|
||||||
updateValues.remove(BodyColumns.TEXT_CONTENT);
|
updateValues.remove(BodyColumns.TEXT_CONTENT);
|
||||||
|
|
||||||
result = db.update(tableName, updateValues, selection, selectionArgs);
|
// Since we removed the html and text values from the update operation,
|
||||||
|
// db.update() can fail because updateValues is empty. Just to a safe check
|
||||||
|
// before continue, and in case check if we found at least the selection
|
||||||
|
// record in db and fill the result variable for later hack check.
|
||||||
|
if (updateValues.size() == 0) {
|
||||||
|
final String proj[] = {BaseColumns._ID};
|
||||||
|
final Cursor c = db.query(Body.TABLE_NAME, proj, selection, selectionArgs,
|
||||||
|
null, null, null);
|
||||||
|
try {
|
||||||
|
result = c.getCount();
|
||||||
|
} finally {
|
||||||
|
c.close();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result = db.update(tableName, updateValues, selection, selectionArgs);
|
||||||
|
}
|
||||||
|
|
||||||
if (result == 0 && selection.equals(Body.SELECTION_BY_MESSAGE_KEY)) {
|
if (result == 0 && selection.equals(Body.SELECTION_BY_MESSAGE_KEY)) {
|
||||||
// TODO: This is a hack. Notably, the selection equality test above
|
// TODO: This is a hack. Notably, the selection equality test above
|
||||||
|
Loading…
Reference in New Issue
Block a user