From 2bfc8215d45388b9e309e25a93efd1dab46aea85 Mon Sep 17 00:00:00 2001 From: ceokot Date: Thu, 18 Aug 2022 16:25:08 +1000 Subject: [PATCH] Fix quote retrieval crash (#944) Co-authored-by: charles --- .../securesms/database/MmsDatabase.kt | 50 +++++++++---------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.kt index 1a202bc072..a412dd14bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.kt @@ -19,7 +19,6 @@ package org.thoughtcrime.securesms.database import android.content.ContentValues import android.content.Context import android.database.Cursor -import android.text.TextUtils import com.annimon.stream.Stream import com.google.android.mms.pdu_alt.NotificationInd import com.google.android.mms.pdu_alt.PduHeaders @@ -497,7 +496,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa var networkFailures: List? = LinkedList() var mismatches: List? = LinkedList() var quote: QuoteModel? = null - if (quoteId > 0 && (!TextUtils.isEmpty(quoteText) || quoteAttachments.isNotEmpty())) { + if (quoteId > 0 && (!quoteText.isNullOrEmpty() || quoteAttachments.isNotEmpty())) { quote = QuoteModel( quoteId, fromSerialized(quoteAuthor), @@ -506,7 +505,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa quoteAttachments ) } - if (!TextUtils.isEmpty(mismatchDocument)) { + if (!mismatchDocument.isNullOrEmpty()) { try { mismatches = JsonUtil.fromJson( mismatchDocument, @@ -516,7 +515,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa Log.w(TAG, e) } } - if (!TextUtils.isEmpty(networkDocument)) { + if (!networkDocument.isNullOrEmpty()) { try { networkFailures = JsonUtil.fromJson(networkDocument, NetworkFailureList::class.java).list @@ -553,7 +552,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa attachments: List ): List { val serializedContacts = cursor.getString(cursor.getColumnIndexOrThrow(SHARED_CONTACTS)) - if (TextUtils.isEmpty(serializedContacts)) { + if (serializedContacts.isNullOrEmpty()) { return emptyList() } val attachmentIdMap: MutableMap = HashMap() @@ -591,7 +590,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa attachments: List ): List { val serializedPreviews = cursor.getString(cursor.getColumnIndexOrThrow(LINK_PREVIEWS)) - if (TextUtils.isEmpty(serializedPreviews)) { + if (serializedPreviews.isNullOrEmpty()) { return emptyList() } val attachmentIdMap: MutableMap = HashMap() @@ -898,7 +897,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa val serializedContacts = getSerializedSharedContacts(insertedAttachments, sharedContacts) val serializedPreviews = getSerializedLinkPreviews(insertedAttachments, linkPreviews) - if (!TextUtils.isEmpty(serializedContacts)) { + if (!serializedContacts.isNullOrEmpty()) { val contactValues = ContentValues() contactValues.put(SHARED_CONTACTS, serializedContacts) val database = databaseHelper.readableDatabase @@ -912,7 +911,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa Log.w(TAG, "Failed to update message with shared contact data.") } } - if (!TextUtils.isEmpty(serializedPreviews)) { + if (!serializedPreviews.isNullOrEmpty()) { val contactValues = ContentValues() contactValues.put(LINK_PREVIEWS, serializedPreviews) val database = databaseHelper.readableDatabase @@ -1316,11 +1315,11 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa } var contentLocationBytes: ByteArray? = null var transactionIdBytes: ByteArray? = null - if (!TextUtils.isEmpty(contentLocation)) contentLocationBytes = toIsoBytes( - contentLocation!! + if (!contentLocation.isNullOrEmpty()) contentLocationBytes = toIsoBytes( + contentLocation ) - if (!TextUtils.isEmpty(transactionId)) transactionIdBytes = toIsoBytes( - transactionId!! + if (!transactionId.isNullOrEmpty()) transactionIdBytes = toIsoBytes( + transactionId ) val slideDeck = SlideDeck(context, MmsNotificationAttachment(status, messageSize)) return NotificationMmsMessageRecord( @@ -1402,16 +1401,16 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa } private fun getRecipientFor(serialized: String?): Recipient { - val address: Address = if (TextUtils.isEmpty(serialized) || "insert-address-token" == serialized) { + val address: Address = if (serialized.isNullOrEmpty() || "insert-address-token" == serialized) { UNKNOWN } else { - fromSerialized(serialized!!) + fromSerialized(serialized) } return Recipient.from(context, address, true) } private fun getMismatchedIdentities(document: String?): List? { - if (!TextUtils.isEmpty(document)) { + if (!document.isNullOrEmpty()) { try { return JsonUtil.fromJson(document, IdentityKeyMismatchList::class.java).list } catch (e: IOException) { @@ -1422,7 +1421,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa } private fun getFailures(document: String?): List? { - if (!TextUtils.isEmpty(document)) { + if (!document.isNullOrEmpty()) { try { return JsonUtil.fromJson(document, NetworkFailureList::class.java).list } catch (ioe: IOException) { @@ -1442,6 +1441,7 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa private fun getQuote(cursor: Cursor): Quote? { val quoteId = cursor.getLong(cursor.getColumnIndexOrThrow(QUOTE_ID)) val quoteAuthor = cursor.getString(cursor.getColumnIndexOrThrow(QUOTE_AUTHOR)) + if (quoteId == 0L || quoteAuthor.isNullOrBlank()) return null val retrievedQuote = get(context).mmsSmsDatabase().getMessageFor(quoteId, quoteAuthor) val quoteText = retrievedQuote?.body val quoteMissing = retrievedQuote == null @@ -1450,17 +1450,13 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa Stream.of(attachments).filter { obj: DatabaseAttachment? -> obj!!.isQuote } .toList() val quoteDeck = SlideDeck(context, quoteAttachments!!) - return if (quoteId > 0 && !TextUtils.isEmpty(quoteAuthor)) { - Quote( - quoteId, - fromExternal(context, quoteAuthor), - quoteText, - quoteMissing, - quoteDeck - ) - } else { - null - } + return Quote( + quoteId, + fromExternal(context, quoteAuthor), + quoteText, + quoteMissing, + quoteDeck + ) } override fun close() {