diff --git a/models/user/user.go b/models/user/user.go index 674195400d0..869b31d5d28 100644 --- a/models/user/user.go +++ b/models/user/user.go @@ -1231,6 +1231,9 @@ func GetUsersByEmails(ctx context.Context, emails []string) (*EmailUserMap, erro noReplyAddressSuffix := "@" + strings.ToLower(setting.Service.NoReplyAddress) for _, email := range emails { emailLower := strings.ToLower(email) + if emailLower == "" { + continue // a commit without an author email names no user + } needCheckEmails.Add(emailLower) if localPart, ok := strings.CutSuffix(emailLower, noReplyAddressSuffix); ok { name, id := parseLocalPartToNameID(localPart) diff --git a/models/user/user_test.go b/models/user/user_test.go index cca2d0192a1..92c344435f2 100644 --- a/models/user/user_test.go +++ b/models/user/user_test.go @@ -96,6 +96,12 @@ func TestUserEmails(t *testing.T) { setting.Service.NoReplyAddress = "example.com" testGetUserByEmail(t, "user1-2@example.COM", 1) }) + + t.Run("EmptyEmail", func(t *testing.T) { + // A user whose email address is empty must not own commits that have no author email. + require.NoError(t, db.Insert(t.Context(), &user_model.EmailAddress{UID: 2, Email: "", LowerEmail: "", IsActivated: true})) + testGetUserByEmail(t, "", 0) + }) }) t.Run("GetUserByEmail", func(t *testing.T) { testGetUserByEmail := func(t *testing.T, email string, uid int64) {