From 4887ad092fd652fd831e842b22b4655087cf57b2 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Tue, 17 Dec 2019 13:08:18 +0000 Subject: [PATCH 1/3] Fix bug where we added duplicate event IDs as auth_events --- synapse/event_auth.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/synapse/event_auth.py b/synapse/event_auth.py index d184b0273be1..9c2303e6e276 100644 --- a/synapse/event_auth.py +++ b/synapse/event_auth.py @@ -14,6 +14,7 @@ # limitations under the License. import logging +from typing import Set, Tuple from canonicaljson import encode_canonical_json from signedjson.key import decode_verify_key_bytes @@ -637,7 +638,7 @@ def get_public_keys(invite_event): return public_keys -def auth_types_for_event(event): +def auth_types_for_event(event) -> Set[Tuple[str]]: """Given an event, return a list of (EventType, StateKey) that may be needed to auth the event. The returned list may be a superset of what would actually be required depending on the full state of the room. @@ -646,20 +647,22 @@ def auth_types_for_event(event): actually auth the event. """ if event.type == EventTypes.Create: - return [] + return set() - auth_types = [ - (EventTypes.PowerLevels, ""), - (EventTypes.Member, event.sender), - (EventTypes.Create, ""), - ] + auth_types = set( + ( + (EventTypes.PowerLevels, ""), + (EventTypes.Member, event.sender), + (EventTypes.Create, ""), + ) + ) if event.type == EventTypes.Member: membership = event.content["membership"] if membership in [Membership.JOIN, Membership.INVITE]: - auth_types.append((EventTypes.JoinRules, "")) + auth_types.add((EventTypes.JoinRules, "")) - auth_types.append((EventTypes.Member, event.state_key)) + auth_types.add((EventTypes.Member, event.state_key)) if membership == Membership.INVITE: if "third_party_invite" in event.content: @@ -667,6 +670,6 @@ def auth_types_for_event(event): EventTypes.ThirdPartyInvite, event.content["third_party_invite"]["signed"]["token"], ) - auth_types.append(key) + auth_types.add(key) return auth_types From 599fc33cf3f7a45304aa38050fc0e9078af211a9 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Tue, 17 Dec 2019 13:12:12 +0000 Subject: [PATCH 2/3] Newsfile --- changelog.d/6560.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/6560.bugfix diff --git a/changelog.d/6560.bugfix b/changelog.d/6560.bugfix new file mode 100644 index 000000000000..e75639f5b48a --- /dev/null +++ b/changelog.d/6560.bugfix @@ -0,0 +1 @@ +Fix a cause of state resets in room versions 2 onwards. From c0e0e5863d0ba017b0de607b3d3afbe4a179413c Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Tue, 17 Dec 2019 13:26:27 +0000 Subject: [PATCH 3/3] Use set literal --- synapse/event_auth.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/synapse/event_auth.py b/synapse/event_auth.py index 9c2303e6e276..350ed9351f19 100644 --- a/synapse/event_auth.py +++ b/synapse/event_auth.py @@ -649,13 +649,11 @@ def auth_types_for_event(event) -> Set[Tuple[str]]: if event.type == EventTypes.Create: return set() - auth_types = set( - ( - (EventTypes.PowerLevels, ""), - (EventTypes.Member, event.sender), - (EventTypes.Create, ""), - ) - ) + auth_types = { + (EventTypes.PowerLevels, ""), + (EventTypes.Member, event.sender), + (EventTypes.Create, ""), + } if event.type == EventTypes.Member: membership = event.content["membership"]