[SES-3153] - Fix crash when admin deletes our attachment (#883)

* Fix crash when admin deletes an attachment

* Fix wrong column used in query
pull/1709/head
SessionHero01 3 months ago committed by GitHub
parent 9ba8e11b66
commit 03b5b40b93
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -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

@ -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}

@ -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<jobject>(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"

@ -383,6 +383,11 @@ class GroupInfoConfig private constructor(pointer: Long): ConfigBase(pointer), M
interface ReadableGroupMembersConfig: ReadableConfig {
fun all(): List<GroupMember>
/**
* 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<Pair<GroupMember, Group
return all().asSequence().map { it to status(it) }
}
/**
* Returns the [GroupMember] for the given [pubKeyHex] or null if it doesn't exist or is invalid
*/
fun ReadableGroupMembersConfig.getOrNull(pubKeyHex: String): GroupMember? {
return runCatching {
get(pubKeyHex)
}.getOrNull()
}
interface MutableGroupMembersConfig : ReadableGroupMembersConfig, MutableConfig {
fun getOrConstruct(pubKeyHex: String): GroupMember
fun set(groupMember: GroupMember)

Loading…
Cancel
Save