Merge pull request #2900 from davotoula/fix/relay-broadcast-cycle

bugfix: break a-tag cycle in computeRelayListToBroadcast
This commit is contained in:
Vitor Pamplona
2026-05-14 15:14:08 -04:00
committed by GitHub
@@ -965,7 +965,15 @@ class Account(
return true
}
fun computeRelayListToBroadcast(event: Event): Set<NormalizedRelayUrl> {
fun computeRelayListToBroadcast(event: Event): Set<NormalizedRelayUrl> = computeRelayListToBroadcast(event, mutableSetOf())
private fun computeRelayListToBroadcast(
event: Event,
visited: MutableSet<HexKey>,
): Set<NormalizedRelayUrl> {
// a-tagged events can form cycles; without this the two recursive descents stack-overflow.
if (!visited.add(event.id)) return emptySet()
if (event is GiftWrapEvent) {
val receiver = event.recipientPubKey()
return if (receiver != null) {
@@ -1044,7 +1052,7 @@ class Account(
}
linkedNote.event?.let { linkedEvent ->
relayList.addAll(computeRelayListToBroadcast(linkedEvent))
relayList.addAll(computeRelayListToBroadcast(linkedEvent, visited))
}
}
}
@@ -1065,7 +1073,7 @@ class Account(
}
linkedNote.event?.let { linkedEvent ->
relayList.addAll(computeRelayListToBroadcast(linkedEvent))
relayList.addAll(computeRelayListToBroadcast(linkedEvent, visited))
}
}
}