diff --git a/integrations/links_test.go b/integrations/links_test.go index 329e54528..e69d9306e 100644 --- a/integrations/links_test.go +++ b/integrations/links_test.go @@ -51,6 +51,7 @@ func TestRedirectsNoLogin(t *testing.T) { "/user2/repo1/src/master": "/user2/repo1/src/branch/master", "/user2/repo1/src/master/file.txt": "/user2/repo1/src/branch/master/file.txt", "/user2/repo1/src/master/directory/file.txt": "/user2/repo1/src/branch/master/directory/file.txt", + "/user/avatar/Ghost/-1": "/img/avatar_default.png", } for link, redirectLink := range redirects { req := NewRequest(t, "GET", link) diff --git a/routers/user/avatar.go b/routers/user/avatar.go index 20597c72f..045206c50 100644 --- a/routers/user/avatar.go +++ b/routers/user/avatar.go @@ -6,6 +6,7 @@ package user import ( "strconv" + "strings" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" @@ -23,14 +24,19 @@ func Avatar(ctx *context.Context) { log.Debug("Asked avatar for user %v and size %v", userName, size) - user, err := models.GetUserByName(userName) - if err != nil { - if models.IsErrUserNotExist(err) { - ctx.ServerError("Requested avatar for invalid user", err) - } else { - ctx.ServerError("Retrieving user by name", err) + var user *models.User + if strings.ToLower(userName) != "ghost" { + user, err = models.GetUserByName(userName) + if err != nil { + if models.IsErrUserNotExist(err) { + ctx.ServerError("Requested avatar for invalid user", err) + } else { + ctx.ServerError("Retrieving user by name", err) + } + return } - return + } else { + user = models.NewGhostUser() } ctx.Redirect(user.RealSizedAvatarLink(size))