Fix bug which caused failure on join with malformed membership events (#8385)

pull/8401/head
Richard van der Hoff 2020-09-23 16:42:14 +01:00 committed by GitHub
parent cbabb312e0
commit 302dc89f6a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 3 deletions

1
changelog.d/8385.bugfix Normal file
View File

@ -0,0 +1 @@
Fix a bug which could cause errors in rooms with malformed membership events, on servers using sqlite.

View File

@ -17,7 +17,7 @@
import itertools import itertools
import logging import logging
from collections import OrderedDict, namedtuple from collections import OrderedDict, namedtuple
from typing import TYPE_CHECKING, Dict, Iterable, List, Set, Tuple from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Set, Tuple
import attr import attr
from prometheus_client import Counter from prometheus_client import Counter
@ -1108,6 +1108,10 @@ class PersistEventsStore:
def _store_room_members_txn(self, txn, events, backfilled): def _store_room_members_txn(self, txn, events, backfilled):
"""Store a room member in the database. """Store a room member in the database.
""" """
def str_or_none(val: Any) -> Optional[str]:
return val if isinstance(val, str) else None
self.db_pool.simple_insert_many_txn( self.db_pool.simple_insert_many_txn(
txn, txn,
table="room_memberships", table="room_memberships",
@ -1118,8 +1122,8 @@ class PersistEventsStore:
"sender": event.user_id, "sender": event.user_id,
"room_id": event.room_id, "room_id": event.room_id,
"membership": event.membership, "membership": event.membership,
"display_name": event.content.get("displayname", None), "display_name": str_or_none(event.content.get("displayname")),
"avatar_url": event.content.get("avatar_url", None), "avatar_url": str_or_none(event.content.get("avatar_url")),
} }
for event in events for event in events
], ],