fix: return early if no profile name (prefs likely invalid state) and ignore contacts whose publicKey fails to parse

This commit is contained in:
jubb 2021-02-26 10:08:30 +11:00
parent 2a741049cc
commit 85336238a7
2 changed files with 9 additions and 5 deletions

View File

@ -34,7 +34,7 @@ object MultiDeviceProtocol {
}.map { recipient -> }.map { recipient ->
ConfigurationMessage.Contact(recipient.address.serialize(), recipient.name!!, recipient.profileAvatar, recipient.profileKey) ConfigurationMessage.Contact(recipient.address.serialize(), recipient.name!!, recipient.profileAvatar, recipient.profileKey)
} }
val configurationMessage = ConfigurationMessage.getCurrent(contacts) val configurationMessage = ConfigurationMessage.getCurrent(contacts) ?: return
val serializedMessage = configurationMessage.toProto()!!.toByteArray() val serializedMessage = configurationMessage.toProto()!!.toByteArray()
val messageSender = ApplicationContext.getInstance(context).communicationModule.provideSignalMessageSender() val messageSender = ApplicationContext.getInstance(context).communicationModule.provideSignalMessageSender()
val address = SignalServiceAddress(userPublicKey) val address = SignalServiceAddress(userPublicKey)
@ -58,7 +58,7 @@ object MultiDeviceProtocol {
}.map { recipient -> }.map { recipient ->
ConfigurationMessage.Contact(recipient.address.serialize(), recipient.name!!, recipient.profileAvatar, recipient.profileKey) ConfigurationMessage.Contact(recipient.address.serialize(), recipient.name!!, recipient.profileAvatar, recipient.profileKey)
} }
val configurationMessage = ConfigurationMessage.getCurrent(contacts) val configurationMessage = ConfigurationMessage.getCurrent(contacts) ?: return
val serializedMessage = configurationMessage.toProto()!!.toByteArray() val serializedMessage = configurationMessage.toProto()!!.toByteArray()
val messageSender = ApplicationContext.getInstance(context).communicationModule.provideSignalMessageSender() val messageSender = ApplicationContext.getInstance(context).communicationModule.provideSignalMessageSender()
val address = SignalServiceAddress(userPublicKey) val address = SignalServiceAddress(userPublicKey)

View File

@ -67,7 +67,11 @@ class ConfigurationMessage(val closedGroups: List<ClosedGroup>, val openGroups:
fun toProto(): SignalServiceProtos.ConfigurationMessage.Contact? { fun toProto(): SignalServiceProtos.ConfigurationMessage.Contact? {
val result = SignalServiceProtos.ConfigurationMessage.Contact.newBuilder() val result = SignalServiceProtos.ConfigurationMessage.Contact.newBuilder()
result.name = this.name result.name = this.name
result.publicKey = ByteString.copyFrom(Hex.fromStringCondensed(publicKey)) try {
result.publicKey = ByteString.copyFrom(Hex.fromStringCondensed(publicKey))
} catch (e: Exception) {
return null
}
if (!this.profilePicture.isNullOrEmpty()) { if (!this.profilePicture.isNullOrEmpty()) {
result.profilePicture = this.profilePicture result.profilePicture = this.profilePicture
} }
@ -83,13 +87,13 @@ class ConfigurationMessage(val closedGroups: List<ClosedGroup>, val openGroups:
companion object { companion object {
fun getCurrent(contacts: List<Contact>): ConfigurationMessage { fun getCurrent(contacts: List<Contact>): ConfigurationMessage? {
val closedGroups = mutableListOf<ClosedGroup>() val closedGroups = mutableListOf<ClosedGroup>()
val openGroups = mutableListOf<String>() val openGroups = mutableListOf<String>()
val sharedConfig = MessagingConfiguration.shared val sharedConfig = MessagingConfiguration.shared
val storage = sharedConfig.storage val storage = sharedConfig.storage
val context = sharedConfig.context val context = sharedConfig.context
val displayName = TextSecurePreferences.getProfileName(context)!! val displayName = TextSecurePreferences.getProfileName(context) ?: return null
val profilePicture = TextSecurePreferences.getProfilePictureURL(context) val profilePicture = TextSecurePreferences.getProfilePictureURL(context)
val profileKey = ProfileKeyUtil.getProfileKey(context) val profileKey = ProfileKeyUtil.getProfileKey(context)
val groups = storage.getAllGroups() val groups = storage.getAllGroups()