Throw exception on illegal URI's in EmailProvider operations
Change-Id: I6354c03e7cead81df3764b7d0bd1be0e90271664
This commit is contained in:
parent
fdfd466fe6
commit
e6a22dff39
@ -308,6 +308,22 @@ public class EmailProvider extends ContentProvider {
|
|||||||
CONTENT_VALUES_RESET_NEW_MESSAGE_COUNT.put(Account.NEW_MESSAGE_COUNT, 0);
|
CONTENT_VALUES_RESET_NEW_MESSAGE_COUNT.put(Account.NEW_MESSAGE_COUNT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wrap the UriMatcher call so we can throw a runtime exception if an unknown Uri is passed in
|
||||||
|
* @param uri the Uri to match
|
||||||
|
* @return the match value
|
||||||
|
*/
|
||||||
|
private static int findMatch(Uri uri, String methodName) {
|
||||||
|
int match = sURIMatcher.match(uri);
|
||||||
|
if (match < 0) {
|
||||||
|
throw new IllegalArgumentException("Unknown uri: uri");
|
||||||
|
} else if (Email.LOGD) {
|
||||||
|
Log.v(TAG, methodName + ": uri=" + uri + ", match is " + match);
|
||||||
|
}
|
||||||
|
return match;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Internal helper method for index creation.
|
* Internal helper method for index creation.
|
||||||
* Example:
|
* Example:
|
||||||
@ -923,8 +939,7 @@ public class EmailProvider extends ContentProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int delete(Uri uri, String selection, String[] selectionArgs) {
|
public int delete(Uri uri, String selection, String[] selectionArgs) {
|
||||||
if (Email.DEBUG_THREAD_CHECK) Email.warnIfUiThread();
|
final int match = findMatch(uri, "delete");
|
||||||
final int match = sURIMatcher.match(uri);
|
|
||||||
Context context = getContext();
|
Context context = getContext();
|
||||||
// Pick the correct database for this operation
|
// Pick the correct database for this operation
|
||||||
// If we're in a transaction already (which would happen during applyBatch), then the
|
// If we're in a transaction already (which would happen during applyBatch), then the
|
||||||
@ -936,10 +951,6 @@ public class EmailProvider extends ContentProvider {
|
|||||||
boolean messageDeletion = false;
|
boolean messageDeletion = false;
|
||||||
ContentResolver resolver = context.getContentResolver();
|
ContentResolver resolver = context.getContentResolver();
|
||||||
|
|
||||||
if (Email.LOGD) {
|
|
||||||
Log.v(TAG, "EmailProvider.delete: uri=" + uri + ", match is " + match);
|
|
||||||
}
|
|
||||||
|
|
||||||
ContentCache cache = CONTENT_CACHES[table];
|
ContentCache cache = CONTENT_CACHES[table];
|
||||||
String tableName = TABLE_NAMES[table];
|
String tableName = TABLE_NAMES[table];
|
||||||
int result = -1;
|
int result = -1;
|
||||||
@ -1077,7 +1088,7 @@ public class EmailProvider extends ContentProvider {
|
|||||||
@Override
|
@Override
|
||||||
// Use the email- prefix because message, mailbox, and account are so generic (e.g. SMS, IM)
|
// Use the email- prefix because message, mailbox, and account are so generic (e.g. SMS, IM)
|
||||||
public String getType(Uri uri) {
|
public String getType(Uri uri) {
|
||||||
int match = sURIMatcher.match(uri);
|
int match = findMatch(uri, "getType");
|
||||||
switch (match) {
|
switch (match) {
|
||||||
case BODY_ID:
|
case BODY_ID:
|
||||||
return "vnd.android.cursor.item/email-body";
|
return "vnd.android.cursor.item/email-body";
|
||||||
@ -1123,8 +1134,7 @@ public class EmailProvider extends ContentProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Uri insert(Uri uri, ContentValues values) {
|
public Uri insert(Uri uri, ContentValues values) {
|
||||||
if (Email.DEBUG_THREAD_CHECK) Email.warnIfUiThread();
|
int match = findMatch(uri, "insert");
|
||||||
int match = sURIMatcher.match(uri);
|
|
||||||
Context context = getContext();
|
Context context = getContext();
|
||||||
ContentResolver resolver = context.getContentResolver();
|
ContentResolver resolver = context.getContentResolver();
|
||||||
|
|
||||||
@ -1133,10 +1143,6 @@ public class EmailProvider extends ContentProvider {
|
|||||||
int table = match >> BASE_SHIFT;
|
int table = match >> BASE_SHIFT;
|
||||||
long id;
|
long id;
|
||||||
|
|
||||||
if (Email.LOGD) {
|
|
||||||
Log.v(TAG, "EmailProvider.insert: uri=" + uri + ", match is " + match);
|
|
||||||
}
|
|
||||||
|
|
||||||
// We do NOT allow setting of unreadCount/messageCount via the provider
|
// We do NOT allow setting of unreadCount/messageCount via the provider
|
||||||
// These columns are maintained via triggers
|
// These columns are maintained via triggers
|
||||||
if (match == MAILBOX_ID || match == MAILBOX) {
|
if (match == MAILBOX_ID || match == MAILBOX) {
|
||||||
@ -1251,9 +1257,8 @@ public class EmailProvider extends ContentProvider {
|
|||||||
if (Email.DEBUG) {
|
if (Email.DEBUG) {
|
||||||
time = System.nanoTime();
|
time = System.nanoTime();
|
||||||
}
|
}
|
||||||
if (Email.DEBUG_THREAD_CHECK) Email.warnIfUiThread();
|
|
||||||
Cursor c = null;
|
Cursor c = null;
|
||||||
int match = sURIMatcher.match(uri);
|
int match = findMatch(uri, "query");
|
||||||
Context context = getContext();
|
Context context = getContext();
|
||||||
// See the comment at delete(), above
|
// See the comment at delete(), above
|
||||||
SQLiteDatabase db = getDatabase(context);
|
SQLiteDatabase db = getDatabase(context);
|
||||||
@ -1261,10 +1266,6 @@ public class EmailProvider extends ContentProvider {
|
|||||||
String limit = uri.getQueryParameter(EmailContent.PARAMETER_LIMIT);
|
String limit = uri.getQueryParameter(EmailContent.PARAMETER_LIMIT);
|
||||||
String id;
|
String id;
|
||||||
|
|
||||||
if (Email.LOGD) {
|
|
||||||
Log.v(TAG, "EmailProvider.query: uri=" + uri + ", match is " + match);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find the cache for this query's table (if any)
|
// Find the cache for this query's table (if any)
|
||||||
ContentCache cache = null;
|
ContentCache cache = null;
|
||||||
String tableName = TABLE_NAMES[table];
|
String tableName = TABLE_NAMES[table];
|
||||||
@ -1378,8 +1379,6 @@ public class EmailProvider extends ContentProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
|
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
|
||||||
if (Email.DEBUG_THREAD_CHECK) Email.warnIfUiThread();
|
|
||||||
|
|
||||||
// Handle this special case the fastest possible way
|
// Handle this special case the fastest possible way
|
||||||
if (uri == INTEGRITY_CHECK_URI) {
|
if (uri == INTEGRITY_CHECK_URI) {
|
||||||
checkDatabases();
|
checkDatabases();
|
||||||
@ -1389,7 +1388,7 @@ public class EmailProvider extends ContentProvider {
|
|||||||
// Notify all existing cursors, except for ACCOUNT_RESET_NEW_COUNT(_ID)
|
// Notify all existing cursors, except for ACCOUNT_RESET_NEW_COUNT(_ID)
|
||||||
Uri notificationUri = EmailContent.CONTENT_URI;
|
Uri notificationUri = EmailContent.CONTENT_URI;
|
||||||
|
|
||||||
int match = sURIMatcher.match(uri);
|
int match = findMatch(uri, "update");
|
||||||
Context context = getContext();
|
Context context = getContext();
|
||||||
ContentResolver resolver = context.getContentResolver();
|
ContentResolver resolver = context.getContentResolver();
|
||||||
// See the comment at delete(), above
|
// See the comment at delete(), above
|
||||||
@ -1397,10 +1396,6 @@ public class EmailProvider extends ContentProvider {
|
|||||||
int table = match >> BASE_SHIFT;
|
int table = match >> BASE_SHIFT;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
if (Email.LOGD) {
|
|
||||||
Log.v(TAG, "EmailProvider.update: uri=" + uri + ", match is " + match);
|
|
||||||
}
|
|
||||||
|
|
||||||
// We do NOT allow setting of unreadCount/messageCount via the provider
|
// We do NOT allow setting of unreadCount/messageCount via the provider
|
||||||
// These columns are maintained via triggers
|
// These columns are maintained via triggers
|
||||||
if (match == MAILBOX_ID || match == MAILBOX) {
|
if (match == MAILBOX_ID || match == MAILBOX) {
|
||||||
|
Loading…
Reference in New Issue
Block a user