diff --git a/synapse/events/__init__.py b/synapse/events/__init__.py
index 230daf30d6..ed02138706 100644
--- a/synapse/events/__init__.py
+++ b/synapse/events/__init__.py
@@ -15,6 +15,8 @@
from frozendict import frozendict
+import copy
+
def _freeze(o):
if isinstance(o, dict) or isinstance(o, frozendict):
@@ -48,7 +50,7 @@ def _unfreeze(o):
class _EventInternalMetadata(object):
def __init__(self, internal_metadata_dict):
- self.__dict__ = internal_metadata_dict
+ self.__dict__ = copy.deepcopy(internal_metadata_dict)
def get_dict(self):
return dict(self.__dict__)
@@ -74,10 +76,10 @@ def _event_dict_property(key):
class EventBase(object):
def __init__(self, event_dict, signatures={}, unsigned={},
internal_metadata_dict={}):
- self.signatures = signatures
- self.unsigned = unsigned
+ self.signatures = copy.deepcopy(signatures)
+ self.unsigned = copy.deepcopy(unsigned)
- self._event_dict = event_dict
+ self._event_dict = copy.deepcopy(event_dict)
self.internal_metadata = _EventInternalMetadata(
internal_metadata_dict
@@ -131,11 +133,11 @@ class EventBase(object):
class FrozenEvent(EventBase):
- def __init__(self, event_dict, signatures={}, unsigned={}):
- event_dict = dict(event_dict)
+ def __init__(self, event_dict):
+ event_dict = copy.deepcopy(event_dict)
- signatures.update(event_dict.pop("signatures", {}))
- unsigned.update(event_dict.pop("unsigned", {}))
+ signatures = copy.deepcopy(event_dict.pop("signatures", {}))
+ unsigned = copy.deepcopy(event_dict.pop("unsigned", {}))
frozen_dict = _freeze(event_dict)
diff --git a/synapse/events/builder.py b/synapse/events/builder.py
index 127b8fa904..642264e9f3 100644
--- a/synapse/events/builder.py
+++ b/synapse/events/builder.py
@@ -54,10 +54,9 @@ class EventBuilderFactory(object):
return e_id.to_string()
def new(self, key_values={}):
- if "event_id" not in key_values:
- key_values["event_id"] = self.create_event_id()
+ key_values["event_id"] = self.create_event_id()
- time_now = self.clock.time_msec()
+ time_now = int(self.clock.time_msec())
key_values.setdefault("origin", self.hostname)
key_values.setdefault("origin_server_ts", time_now)
@@ -66,4 +65,6 @@ class EventBuilderFactory(object):
age = key_values["unsigned"].pop("age", 0)
key_values["unsigned"].setdefault("age_ts", time_now - age)
+ key_values["signatures"] = {}
+
return EventBuilder(key_values=key_values,)
|