diff options
author | lovetox <philipp@hoerist.com> | 2020-05-23 11:34:29 +0300 |
---|---|---|
committer | lovetox <philipp@hoerist.com> | 2020-05-23 13:35:19 +0300 |
commit | a8794f1eb832bad0f914684d8fab9d44d9dbd403 (patch) | |
tree | 42badbd91827ab9961517ef8e8dd905582641494 | |
parent | 58c188eb0d0755adf1c6b1e50cb844b070f20742 (diff) |
[omemo] Sanitize BLOBs in sessions table
-rw-r--r-- | omemo/backend/liteaxolotlstore.py | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/omemo/backend/liteaxolotlstore.py b/omemo/backend/liteaxolotlstore.py index 88bee0d..99c4359 100644 --- a/omemo/backend/liteaxolotlstore.py +++ b/omemo/backend/liteaxolotlstore.py @@ -147,7 +147,7 @@ class LiteAxolotlStore(AxolotlStore): create_db_sql = """ BEGIN TRANSACTION; %s - PRAGMA user_version=9; + PRAGMA user_version=10; END TRANSACTION; """ % (create_tables) self._con.executescript(create_db_sql) @@ -299,6 +299,31 @@ class LiteAxolotlStore(AxolotlStore): self._con.execute('PRAGMA user_version=9') self._con.commit() + if self.user_version() < 10: + # Sanitize invalid BLOBs from the python2 days + query_keys = '''SELECT _id, + recipient_id, + device_id, + CAST(record as BLOB) as record, + timestamp, + active + FROM sessions''' + rows = self._con.execute(query_keys).fetchall() + + delete = 'DELETE FROM sessions' + self._con.execute(delete) + + insert = '''INSERT INTO sessions (_id, recipient_id, device_id, + record, timestamp, active) + VALUES (?, ?, ?, ?, ?, ?)''' + for row in rows: + try: + self._con.execute(insert, row) + except Exception as error: + self._log.warning(error) + self._con.execute('PRAGMA user_version=10') + self._con.commit() + def loadSignedPreKey(self, signedPreKeyId): query = 'SELECT record FROM signed_prekeys WHERE prekey_id = ?' result = self._con.execute(query, (signedPreKeyId, )).fetchone() |