From 72884838790db52852c8643ab17be5f6fc0067f0 Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 4 Mar 2026 21:57:11 +0100 Subject: [PATCH] fix: handle deleted user in saved filter view event listener Use a separate error variable for the user lookup in UpdateTaskInSavedFilterViews so that ErrUserDoesNotExist does not pollute the named return `err`. The `:=` inside the for loop shadowed the outer `err`, leaving it set to the stale user-not-found error, which caused the handler to be poisoned. Closes #2359 --- pkg/models/listeners.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/models/listeners.go b/pkg/models/listeners.go index f139f9c43..4c456f82e 100644 --- a/pkg/models/listeners.go +++ b/pkg/models/listeners.go @@ -586,15 +586,15 @@ func (l *UpdateTaskInSavedFilterViews) Handle(msg *message.Message) (err error) var fallbackTimezone string if event.Doer != nil { - var u *user.User - u, err = user.GetUserByID(s, event.Doer.GetID()) - if err == nil { + u, userErr := user.GetUserByID(s, event.Doer.GetID()) + if userErr == nil { fallbackTimezone = u.Timezone - // When a link share triggered this event, the user id will be 0, and thus this fails. - // Only passing the value along when the user was retrieved successfully ensures the whole handler - // does not fail because of that. - // When the fallback is empty, it will be handled later anyhow. } + // When a link share triggered this event, the user id will be 0, and thus this fails. + // Similarly, when the doer has been deleted, the user will not exist. + // Only passing the value along when the user was retrieved successfully ensures the whole handler + // does not fail because of that. + // When the fallback is empty, it will be handled later anyhow. } taskBuckets := []*TaskBucket{}