From fe282b343a4c565f92ee2c8226b6ae5fc36bb792 Mon Sep 17 00:00:00 2001 From: Tim Abbott Date: Tue, 9 Aug 2022 11:41:50 -0700 Subject: [PATCH] realm_emoji: Fix race while custom emoji are being uploaded. During a brief period while a custom emoji is being uploaded, it could be visible to clients even though it was still in the process of being uploaded, an operation that can fail. --- zerver/models.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/zerver/models.py b/zerver/models.py index 19fabad26f..2f31ef763e 100644 --- a/zerver/models.py +++ b/zerver/models.py @@ -1111,7 +1111,17 @@ class RealmEmoji(models.Model): def get_realm_emoji_dicts(realm: Realm, only_active_emojis: bool = False) -> Dict[str, EmojiInfo]: - query = RealmEmoji.objects.filter(realm=realm).select_related("author") + # RealmEmoji objects with file_name=None are still in the process + # of being uploaded, and we expect to be cleaned up by a + # try/finally block if the upload fails, so it's correct to + # exclude them. + query = ( + RealmEmoji.objects.filter(realm=realm) + .exclude( + file_name=None, + ) + .select_related("author") + ) if only_active_emojis: query = query.filter(deactivated=False) d = {}