From 01271f60bec85d7e9138af6dfe616b4e0b103d53 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Sat, 14 Nov 2020 07:58:13 -0300 Subject: [PATCH] Handle emoji availability deserialization failures. --- Signal/src/util/Emoji/Emoji+Available.swift | 7 +++++++ .../src/Storage/Database/SDSKeyValueStore.swift | 11 ++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Signal/src/util/Emoji/Emoji+Available.swift b/Signal/src/util/Emoji/Emoji+Available.swift index ad0b7817ff..6142c81d67 100644 --- a/Signal/src/util/Emoji/Emoji+Available.swift +++ b/Signal/src/util/Emoji/Emoji+Available.swift @@ -33,6 +33,12 @@ extension Emoji { } let availableMap = availableStore.allBoolValuesMap(transaction: transaction) + guard !availableMap.isEmpty else { + Logger.info("Re-building emoji availability cache. Cache could not be loaded.") + uncachedEmoji = Emoji.allCases + return + } + for emoji in Emoji.allCases { if let available = availableMap[emoji.rawValue] { availableCache[emoji] = available @@ -54,6 +60,7 @@ extension Emoji { if uncachedAvailability.count > 0 || iosVersionNeedsUpdate { SDSDatabaseStorage.shared.write { transaction in + availableStore.removeAll(transaction: transaction) for (emoji, available) in uncachedAvailability { availableStore.setBool(available, key: emoji.rawValue, transaction: transaction) } diff --git a/SignalServiceKit/src/Storage/Database/SDSKeyValueStore.swift b/SignalServiceKit/src/Storage/Database/SDSKeyValueStore.swift index 1a55827a1d..4dfbc890dc 100644 --- a/SignalServiceKit/src/Storage/Database/SDSKeyValueStore.swift +++ b/SignalServiceKit/src/Storage/Database/SDSKeyValueStore.swift @@ -410,9 +410,14 @@ public class SDSKeyValueStore: NSObject { WHERE \(SDSKeyValueStore.collectionColumn.columnName) == ? """ - return try! PairRecord.fetchAll(grdbTransaction.database, - sql: sql, - arguments: [collection]) + do { + return try PairRecord.fetchAll(grdbTransaction.database, + sql: sql, + arguments: [collection]) + } catch { + owsFailDebug("Error: \(error)") + return [] + } } }