[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 8f1a74fb29)
(cherry picked from commit 60ac881776)
(cherry picked from commit 5fdc461ac5)
(cherry picked from commit 70623e8da1)
(cherry picked from commit 1d5153aaf6)
This commit is contained in:
Gusted 2023-12-30 15:06:17 +01:00 committed by Earl Warren
parent 6a234abff5
commit 3927f0c8b2
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))
for i := range rl {
// 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
}
r, err := ToPullReview(ctx, rl[i], doer)

View file

@ -12,6 +12,7 @@ import (
access_model "code.gitea.io/gitea/models/perm/access"
repo_model "code.gitea.io/gitea/models/repo"
"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/structs"
@ -47,3 +48,30 @@ func TestPullRequest_APIFormat(t *testing.T) {
assert.Nil(t, apiPullRequest.Head.Repository)
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)
})
})
}