From 6d967cb31dc560f25dac8e976ac8a44813f6bebf Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Tue, 29 Jan 2019 10:43:09 -0500 Subject: [PATCH] Fix 'link preview prefs taint cache' issue. --- .../Interactions/OWSLinkPreview.swift | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift b/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift index 263206220..7c0cfd9a0 100644 --- a/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift +++ b/SignalServiceKit/src/Messages/Interactions/OWSLinkPreview.swift @@ -434,6 +434,15 @@ public class OWSLinkPreview: MTLModel { public class func previewUrl(forMessageBodyText body: String?) -> String? { AssertIsOnMainThread() + // Exit early if link previews are not enabled in order to avoid + // tainting the cache. + guard OWSLinkPreview.featureEnabled else { + return nil + } + guard SSKPreferences.areLinkPreviewsEnabled() else { + return nil + } + if let cachedUrl = previewUrlCache.object(forKey: body as AnyObject) as? String { Logger.verbose("URL parsing cache hit.") guard cachedUrl.count > 0 else { @@ -501,6 +510,16 @@ public class OWSLinkPreview: MTLModel { private class func setCachedLinkPreview(_ linkPreviewDraft: OWSLinkPreviewDraft, forPreviewUrl previewUrl: String) { + + // Exit early if link previews are not enabled in order to avoid + // tainting the cache. + guard OWSLinkPreview.featureEnabled else { + return + } + guard SSKPreferences.areLinkPreviewsEnabled() else { + return + } + serialQueue.sync { previewUrlCache.setObject(linkPreviewDraft, forKey: previewUrl as AnyObject) }