From d94e6d2ac8ac03e38025b58dfca45ebec53c2e33 Mon Sep 17 00:00:00 2001 From: Krille Date: Fri, 26 Jan 2024 09:41:55 +0100 Subject: [PATCH] fix: Skip invalid keys which got corrupted in database --- lib/src/utils/device_keys_list.dart | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/src/utils/device_keys_list.dart b/lib/src/utils/device_keys_list.dart index e3daa2e5..b4a26585 100644 --- a/lib/src/utils/device_keys_list.dart +++ b/lib/src/utils/device_keys_list.dart @@ -111,18 +111,22 @@ class DeviceKeysList { outdated = dbEntry['outdated']; deviceKeys = {}; for (final childEntry in childEntries) { - final entry = DeviceKeys.fromDb(childEntry, client); - if (entry.isValid) { + try { + final entry = DeviceKeys.fromDb(childEntry, client); + if (!entry.isValid) throw Exception('Invalid device keys'); deviceKeys[childEntry['device_id']] = entry; - } else { + } catch (e, s) { + Logs().w('Skipping invalid user device key', e, s); outdated = true; } } for (final crossSigningEntry in crossSigningEntries) { - final entry = CrossSigningKey.fromDbJson(crossSigningEntry, client); - if (entry.isValid) { + try { + final entry = CrossSigningKey.fromDbJson(crossSigningEntry, client); + if (!entry.isValid) throw Exception('Invalid device keys'); crossSigningKeys[crossSigningEntry['public_key']] = entry; - } else { + } catch (e, s) { + Logs().w('Skipping invalid cross siging key', e, s); outdated = true; } }