diff options
author | Erik Johnston <erik@matrix.org> | 2019-10-08 16:21:17 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2019-10-08 16:28:57 +0100 |
commit | 1d3858371e9577faf3382d1feee97154e5085cd4 (patch) | |
tree | 16e3cdff3dcc88b6f4b2dbf21247926f514dcd44 /synapse/storage/engines/postgres.py | |
parent | Fix existing hex encoded json values in DB (diff) | |
download | synapse-1d3858371e9577faf3382d1feee97154e5085cd4.tar.xz |
Disable bytes usage with postgres
More often than not passing bytes to `txn.execute` is a bug (where we meant to pass a string) that just happens to work if `BYTEA_OUTPUT` is set to `ESCAPE`. However, this is a bit of a footgun so we want to instead error when this happens, and force using `bytearray` if we actually want to use bytes.
Diffstat (limited to 'synapse/storage/engines/postgres.py')
-rw-r--r-- | synapse/storage/engines/postgres.py | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/synapse/storage/engines/postgres.py b/synapse/storage/engines/postgres.py index 601617b21e..d670286fa5 100644 --- a/synapse/storage/engines/postgres.py +++ b/synapse/storage/engines/postgres.py @@ -22,6 +22,13 @@ class PostgresEngine(object): def __init__(self, database_module, database_config): self.module = database_module self.module.extensions.register_type(self.module.extensions.UNICODE) + + # Disables passing `bytes` to txn.execute, c.f. #6186. If you do + # actually want to use bytes than wrap it in `bytearray`. + def _disable_bytes_adapter(_): + raise Exception("Passing bytes to DB is disabled.") + + self.module.extensions.register_adapter(bytes, _disable_bytes_adapter) self.synchronous_commit = database_config.get("synchronous_commit", True) self._version = None # unknown as yet |