Merge pull request #4958 from k9mail/GH-3653_fix_search_crash

Return empty result when EmailProvider query fails
This commit is contained in:
cketti 2020-09-23 15:57:25 +02:00 committed by GitHub
commit 5cec85cb15
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,10 +1,14 @@
package com.fsck.k9.ui.messagelist
import android.annotation.SuppressLint
import android.content.ContentResolver
import android.database.Cursor
import android.database.MatrixCursor
import android.database.sqlite.SQLiteException
import android.net.Uri
import com.fsck.k9.Account
import com.fsck.k9.Account.SortType
import com.fsck.k9.K9
import com.fsck.k9.Preferences
import com.fsck.k9.fragment.MLFProjectionInfo
import com.fsck.k9.fragment.MessageListFragmentComparators.ArrivalComparator
@ -26,6 +30,7 @@ import com.fsck.k9.search.SqlQueryBuilder
import com.fsck.k9.search.getAccounts
import java.util.ArrayList
import java.util.Comparator
import timber.log.Timber
class MessageListLoader(
private val preferences: Preferences,
@ -62,6 +67,7 @@ class MessageListLoader(
return MessageListInfo(messageListItems, hasMoreMessages)
}
@SuppressLint("Recycle")
private fun loadMessageListForAccount(account: Account, config: MessageListConfig): Cursor? {
val accountUuid = account.uuid
val threadId: String? = getThreadId(config.search)
@ -110,7 +116,17 @@ class MessageListLoader(
val sortOrder: String = buildSortOrder(config)
return contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
return try {
contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
} catch (e: SQLiteException) {
Timber.e(e, "Error querying EmailProvider")
if (K9.DEVELOPER_MODE && e.message?.contains("malformed MATCH expression") == false) {
throw e
}
return MatrixCursor(projection)
}
}
private fun getThreadId(search: LocalSearch): String? {