Skip to content

Commit eee7318

Browse files
authored
Fix false positive GSE errors
1 parent c204138 commit eee7318

File tree

2 files changed

+27
-26
lines changed

2 files changed

+27
-26
lines changed

SignalServiceKit/Messages/MessageSender+SenderKey.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ extension MessageSender {
7070
senderCertificate: SenderCertificate,
7171
localIdentifiers: LocalIdentifiers,
7272
tx: DBWriteTransaction
73-
) -> (
73+
) throws(OWSAssertionError) -> (
7474
senderKeyRecipients: Set<ServiceId>,
7575
sendSenderKeyMessage: (@Sendable () async -> [(ServiceId, any Error)])?
7676
) {
@@ -91,8 +91,7 @@ extension MessageSender {
9191
// them, but we MAY need any of them, so we must ensure they all exist
9292
// before starting. They SHOULD always exist; it's a bug if they don't.
9393
guard threadRecipients.allSatisfy({ endorsements.individual[$0] != nil }) else {
94-
owsFailDebug("Can't use GSEs if some individual endorsements are missing.")
95-
return ([], nil)
94+
throw OWSAssertionError("Can't use GSEs if some individual endorsements are missing")
9695
}
9796
authBuilder = { readyRecipients in
9897
var combined = endorsements.combined
@@ -108,8 +107,7 @@ extension MessageSender {
108107
).build())
109108
}
110109
} else {
111-
owsFailDebug("Can't use Sender Key for a group message unless we have endorsements.")
112-
return ([], nil)
110+
throw OWSAssertionError("Can't use Sender Key for a group message unless we have endorsements")
113111
}
114112

115113
var eligibleRecipients = Set(recipients.filter { serviceId in
@@ -218,7 +216,7 @@ extension MessageSender {
218216
// We should always be able to prepare SKDMs (sending them may fail though).
219217
// TODO: If we can't, the state is probably corrupt and should be reset.
220218
Logger.warn("Fanning out because we couldn't prepare SKDMs: \(error)")
221-
return ([], nil)
219+
throw OWSAssertionError("Fanning out because we couldn't prepare SKDMs")
222220
}
223221

224222
return (

SignalServiceKit/Messages/MessageSender.swift

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -798,29 +798,32 @@ public class MessageSender {
798798

799799
let senderKeyRecipients: Set<ServiceId>
800800
let sendViaSenderKey: (@Sendable () async -> [(ServiceId, any Error)])?
801-
if recoveryState.canUseMultiRecipientSealedSender, thread.usesSenderKey {
802-
(senderKeyRecipients, sendViaSenderKey) = self.prepareSenderKeyMessageSend(
803-
for: serviceIds,
804-
in: thread,
805-
message: message,
806-
serializedMessage: serializedMessage,
807-
endorsements: endorsements,
808-
udAccessMap: udAccessMap,
809-
senderCertificate: senderCertificate,
810-
localIdentifiers: localIdentifiers,
811-
tx: tx
812-
)
813-
} else {
814-
senderKeyRecipients = []
815-
sendViaSenderKey = nil
816-
}
801+
if thread.usesSenderKey {
802+
do throws(OWSAssertionError) {
803+
guard recoveryState.canUseMultiRecipientSealedSender else {
804+
throw OWSAssertionError("Can't use Sender Key because of a prior failure.")
805+
}
806+
(senderKeyRecipients, sendViaSenderKey) = try self.prepareSenderKeyMessageSend(
807+
for: serviceIds,
808+
in: thread,
809+
message: message,
810+
serializedMessage: serializedMessage,
811+
endorsements: endorsements,
812+
udAccessMap: udAccessMap,
813+
senderCertificate: senderCertificate,
814+
localIdentifiers: localIdentifiers,
815+
tx: tx
816+
)
817+
} catch {
818+
senderKeyRecipients = []
819+
sendViaSenderKey = nil
817820

818-
if let thread = thread as? TSGroupThread, sendViaSenderKey == nil {
819-
let fullMembers = Set(thread.groupMembership.fullMembers.compactMap(\.serviceId))
820-
if fullMembers.intersection(serviceIds).count >= 2 {
821821
let notificationPresenter = SSKEnvironment.shared.notificationPresenterRef
822-
notificationPresenter.notifyTestPopulation(ofErrorMessage: "Couldn't send using GSEs.")
822+
notificationPresenter.notifyTestPopulation(ofErrorMessage: error.description)
823823
}
824+
} else {
825+
senderKeyRecipients = []
826+
sendViaSenderKey = nil
824827
}
825828

826829
return .sendPreparedMessage(SendMessageNextAction.PreparedState(

0 commit comments

Comments
 (0)