From 03b5b40b9327423462e4be6c19e4b622d2f7a475 Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Fri, 17 Jan 2025 16:18:40 +1100 Subject: [PATCH] [SES-3153] - Fix crash when admin deletes our attachment (#883) * Fix crash when admin deletes an attachment * Fix wrong column used in query --- .../v2/messages/VisibleMessageView.kt | 3 ++- .../securesms/database/LokiMessageDatabase.kt | 2 +- .../src/main/cpp/group_members.cpp | 24 +++++++++++-------- .../loki/messenger/libsession_util/Config.kt | 14 +++++++++++ 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt index 3dc65ba7f0..2c1662656b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt @@ -60,6 +60,7 @@ import org.thoughtcrime.securesms.groups.OpenGroupManager import org.thoughtcrime.securesms.home.UserDetailsBottomSheet import com.bumptech.glide.Glide import com.bumptech.glide.RequestManager +import network.loki.messenger.libsession_util.getOrNull import org.session.libsession.utilities.ConfigFactoryProtocol import org.session.libsignal.utilities.AccountId import org.thoughtcrime.securesms.database.model.MmsMessageRecord @@ -212,7 +213,7 @@ class VisibleMessageView : FrameLayout { binding.moderatorIconImageView.isVisible = isModerator } else if (thread.isGroupV2Recipient) { val isAdmin = configFactory.withGroupConfigs(AccountId(thread.address.serialize())) { - it.groupMembers.get(senderAccountID)?.admin == true + it.groupMembers.getOrNull(senderAccountID)?.admin == true } binding.moderatorIconImageView.isVisible = isAdmin diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/LokiMessageDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/LokiMessageDatabase.kt index 545ca6fb0b..31f4e3b83e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/LokiMessageDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/LokiMessageDatabase.kt @@ -260,7 +260,7 @@ class LokiMessageDatabase(context: Context, helper: SQLCipherOpenHelper) : Datab mms_hash_table.$serverHash, mms.${MmsSmsColumns.ID}, mms.${MmsSmsColumns.ADDRESS}, - mms.${MmsDatabase.MESSAGE_TYPE}, + mms.${MmsDatabase.MESSAGE_BOX}, false FROM $mmsHashTable mms_hash_table LEFT OUTER JOIN ${MmsDatabase.TABLE_NAME} mms ON mms_hash_table.${messageID} = mms.${MmsSmsColumns.ID} diff --git a/libsession-util/src/main/cpp/group_members.cpp b/libsession-util/src/main/cpp/group_members.cpp index 4179e89608..7d4dd58cf2 100644 --- a/libsession-util/src/main/cpp/group_members.cpp +++ b/libsession-util/src/main/cpp/group_members.cpp @@ -1,5 +1,7 @@ #include "group_members.h" +#include "jni_utils.h" + extern "C" JNIEXPORT jlong JNICALL Java_network_loki_messenger_libsession_1util_GroupMembersConfig_00024Companion_newInstance( @@ -52,16 +54,18 @@ extern "C" JNIEXPORT jobject JNICALL Java_network_loki_messenger_libsession_1util_GroupMembersConfig_get(JNIEnv *env, jobject thiz, jstring pub_key_hex) { - std::lock_guard lock{util::util_mutex_}; - auto config = ptrToMembers(env, thiz); - auto pub_key_bytes = env->GetStringUTFChars(pub_key_hex, nullptr); - auto member = config->get(pub_key_bytes); - if (!member) { - return nullptr; - } - auto serialized = util::serialize_group_member(env, *member); - env->ReleaseStringUTFChars(pub_key_hex, pub_key_bytes); - return serialized; + return jni_utils::run_catching_cxx_exception_or_throws(env, [=]() -> jobject { + std::lock_guard lock{util::util_mutex_}; + auto config = ptrToMembers(env, thiz); + auto pub_key_bytes = env->GetStringUTFChars(pub_key_hex, nullptr); + auto member = config->get(pub_key_bytes); + if (!member) { + return nullptr; + } + auto serialized = util::serialize_group_member(env, *member); + env->ReleaseStringUTFChars(pub_key_hex, pub_key_bytes); + return serialized; + }); } extern "C" diff --git a/libsession-util/src/main/java/network/loki/messenger/libsession_util/Config.kt b/libsession-util/src/main/java/network/loki/messenger/libsession_util/Config.kt index 5f5c5cf2b9..41f411311d 100644 --- a/libsession-util/src/main/java/network/loki/messenger/libsession_util/Config.kt +++ b/libsession-util/src/main/java/network/loki/messenger/libsession_util/Config.kt @@ -383,6 +383,11 @@ class GroupInfoConfig private constructor(pointer: Long): ConfigBase(pointer), M interface ReadableGroupMembersConfig: ReadableConfig { fun all(): List + + /** + * Returns the [GroupMember] for the given [pubKeyHex] or null if it doesn't exist. + * Note: exception will be thrown if the [pubKeyHex] is invalid. You can opt to use [getOrNull] instead + */ fun get(pubKeyHex: String): GroupMember? fun status(groupMember: GroupMember): GroupMember.Status } @@ -391,6 +396,15 @@ fun ReadableGroupMembersConfig.allWithStatus(): Sequence