[GITEA] Fix NPE in ToPullReviewList

- Add condition to ensure doer isn't nil when using it.
- Added unit test.
- Resolves #2055

(cherry picked from commit 8f1a74fb2944c2a1cf3824c2c6f233d6df2df593)
(cherry picked from commit 60ac881776c750bc25e1d142e201e78e48e3ac23)
(cherry picked from commit 5fdc461ac53ec486e609ad6ac40cde8e701c0fb8)
(cherry picked from commit 70623e8da1eb6c7e13a3cef04f1db9d479ffd7a4)
(cherry picked from commit 1d5153aaf69bdd114800ebc2a1268896f8dc3ff4)
(cherry picked from commit 3927f0c8b2c67733303005ebad08fb6835b22e36)
This commit is contained in:
Gusted 2023-12-30 15:06:17 +01:00 committed by Earl Warren
parent f3b298133e
commit 1bae2430c0
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00
2 changed files with 29 additions and 1 deletions

View file

@ -66,7 +66,7 @@ func ToPullReviewList(ctx context.Context, rl []*issues_model.Review, doer *user
result := make([]*api.PullReview, 0, len(rl)) result := make([]*api.PullReview, 0, len(rl))
for i := range rl { for i := range rl {
// show pending reviews only for the user who created them // show pending reviews only for the user who created them
if rl[i].Type == issues_model.ReviewTypePending && !(doer.IsAdmin || doer.ID == rl[i].ReviewerID) { if rl[i].Type == issues_model.ReviewTypePending && (doer == nil || !(doer.IsAdmin || doer.ID == rl[i].ReviewerID)) {
continue continue
} }
r, err := ToPullReview(ctx, rl[i], doer) r, err := ToPullReview(ctx, rl[i], doer)

View file

@ -12,6 +12,7 @@ import (
access_model "code.gitea.io/gitea/models/perm/access" access_model "code.gitea.io/gitea/models/perm/access"
repo_model "code.gitea.io/gitea/models/repo" repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/structs"
@ -47,3 +48,30 @@ func TestPullRequest_APIFormat(t *testing.T) {
assert.Nil(t, apiPullRequest.Head.Repository) assert.Nil(t, apiPullRequest.Head.Repository)
assert.EqualValues(t, -1, apiPullRequest.Head.RepoID) assert.EqualValues(t, -1, apiPullRequest.Head.RepoID)
} }
func TestPullReviewList(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
t.Run("Pending review", func(t *testing.T) {
reviewer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
review := unittest.AssertExistsAndLoadBean(t, &issues_model.Review{ID: 6, ReviewerID: reviewer.ID})
rl := []*issues_model.Review{review}
t.Run("Anonymous", func(t *testing.T) {
prList, err := ToPullReviewList(db.DefaultContext, rl, nil)
assert.NoError(t, err)
assert.Empty(t, prList)
})
t.Run("Reviewer", func(t *testing.T) {
prList, err := ToPullReviewList(db.DefaultContext, rl, reviewer)
assert.NoError(t, err)
assert.Len(t, prList, 1)
})
t.Run("Admin", func(t *testing.T) {
adminUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{IsAdmin: true}, unittest.Cond("id != ?", reviewer.ID))
prList, err := ToPullReviewList(db.DefaultContext, rl, adminUser)
assert.NoError(t, err)
assert.Len(t, prList, 1)
})
})
}