From b90e7a4412ea214b71ad23327a59b24766517c85 Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Sat, 28 Oct 2023 14:53:12 +0100 Subject: [PATCH] fix: prevent potential double fetching of cached server --- crates/core/database/src/util/permissions.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/crates/core/database/src/util/permissions.rs b/crates/core/database/src/util/permissions.rs index c9d67fa8..ae6634a2 100644 --- a/crates/core/database/src/util/permissions.rs +++ b/crates/core/database/src/util/permissions.rs @@ -344,7 +344,23 @@ impl PermissionQuery for DatabasePermissionQuery<'_> { | Cow::Owned(Channel::TextChannel { server, .. }) | Cow::Borrowed(Channel::VoiceChannel { server, .. }) | Cow::Owned(Channel::VoiceChannel { server, .. }) => { - // FIXME: may double fetch + if let Some(known_server) = + // I'm not sure why I can't just pattern match both at once here? + // It throws some weird error and the provided fix doesn't work :/ + if let Some(Cow::Borrowed(known_server)) = self.server { + Some(known_server) + } else if let Some(Cow::Owned(ref known_server)) = self.server { + Some(known_server) + } else { + None + } + { + if server == &known_server.id { + // Already cached, return early. + return; + } + } + if let Ok(server) = self.database.fetch_server(server).await { self.server.replace(Cow::Owned(server)); }