From 03cacf971e902e488833e35512e56a36d0861ef8 Mon Sep 17 00:00:00 2001 From: Giteabot Date: Thu, 6 Jul 2023 15:04:26 -0400 Subject: [PATCH] Check `ctx.Written()` for `GetActionIssue` (#25698) (#25711) Backport #25698 by @wolfogre Fix #25697. Just avoid panic, maybe there's another bug to trigger this case. Co-authored-by: Jason Song --- routers/web/repo/issue.go | 5 ++++- routers/web/repo/issue_content_history.go | 10 +++++----- routers/web/repo/issue_pin.go | 3 +++ routers/web/repo/pull.go | 2 +- routers/web/repo/pull_review.go | 11 +++++++---- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 9884a5a9e8..52ccc0efa8 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -1958,7 +1958,7 @@ func GetActionIssue(ctx *context.Context) *issues_model.Issue { return nil } if err = issue.LoadAttributes(ctx); err != nil { - ctx.ServerError("LoadAttributes", nil) + ctx.ServerError("LoadAttributes", err) return nil } return issue @@ -3258,6 +3258,9 @@ func filterXRefComments(ctx *context.Context, issue *issues_model.Issue) error { // GetIssueAttachments returns attachments for the issue func GetIssueAttachments(ctx *context.Context) { issue := GetActionIssue(ctx) + if ctx.Written() { + return + } attachments := make([]*api.Attachment, len(issue.Attachments)) for i := 0; i < len(issue.Attachments); i++ { attachments[i] = convert.ToAttachment(issue.Attachments[i]) diff --git a/routers/web/repo/issue_content_history.go b/routers/web/repo/issue_content_history.go index 46a320a8cc..3dd7725c21 100644 --- a/routers/web/repo/issue_content_history.go +++ b/routers/web/repo/issue_content_history.go @@ -24,7 +24,7 @@ import ( // GetContentHistoryOverview get overview func GetContentHistoryOverview(ctx *context.Context) { issue := GetActionIssue(ctx) - if issue == nil { + if ctx.Written() { return } @@ -43,11 +43,11 @@ func GetContentHistoryOverview(ctx *context.Context) { // GetContentHistoryList get list func GetContentHistoryList(ctx *context.Context) { issue := GetActionIssue(ctx) - commentID := ctx.FormInt64("comment_id") - if issue == nil { + if ctx.Written() { return } + commentID := ctx.FormInt64("comment_id") items, _ := issues_model.FetchIssueContentHistoryList(ctx, issue.ID, commentID) // render history list to HTML for frontend dropdown items: (name, value) @@ -113,7 +113,7 @@ func canSoftDeleteContentHistory(ctx *context.Context, issue *issues_model.Issue // GetContentHistoryDetail get detail func GetContentHistoryDetail(ctx *context.Context) { issue := GetActionIssue(ctx) - if issue == nil { + if ctx.Written() { return } @@ -179,7 +179,7 @@ func GetContentHistoryDetail(ctx *context.Context) { // SoftDeleteContentHistory soft delete func SoftDeleteContentHistory(ctx *context.Context) { issue := GetActionIssue(ctx) - if issue == nil { + if ctx.Written() { return } diff --git a/routers/web/repo/issue_pin.go b/routers/web/repo/issue_pin.go index 6586372fc5..bbfeaee6e8 100644 --- a/routers/web/repo/issue_pin.go +++ b/routers/web/repo/issue_pin.go @@ -15,6 +15,9 @@ import ( // IssuePinOrUnpin pin or unpin a Issue func IssuePinOrUnpin(ctx *context.Context) { issue := GetActionIssue(ctx) + if ctx.Written() { + return + } // If we don't do this, it will crash when trying to add the pin event to the comment history err := issue.LoadRepo(ctx) diff --git a/routers/web/repo/pull.go b/routers/web/repo/pull.go index cd401b88f0..e570c1753e 100644 --- a/routers/web/repo/pull.go +++ b/routers/web/repo/pull.go @@ -1470,10 +1470,10 @@ func DownloadPullDiffOrPatch(ctx *context.Context, patch bool) { // UpdatePullRequestTarget change pull request's target branch func UpdatePullRequestTarget(ctx *context.Context) { issue := GetActionIssue(ctx) - pr := issue.PullRequest if ctx.Written() { return } + pr := issue.PullRequest if !issue.IsPull { ctx.Error(http.StatusNotFound) return diff --git a/routers/web/repo/pull_review.go b/routers/web/repo/pull_review.go index cf1dfc181f..48a3628448 100644 --- a/routers/web/repo/pull_review.go +++ b/routers/web/repo/pull_review.go @@ -28,6 +28,9 @@ const ( // RenderNewCodeCommentForm will render the form for creating a new review comment func RenderNewCodeCommentForm(ctx *context.Context) { issue := GetActionIssue(ctx) + if ctx.Written() { + return + } if !issue.IsPull { return } @@ -52,10 +55,10 @@ func RenderNewCodeCommentForm(ctx *context.Context) { func CreateCodeComment(ctx *context.Context) { form := web.GetForm(ctx).(*forms.CodeCommentForm) issue := GetActionIssue(ctx) - if !issue.IsPull { + if ctx.Written() { return } - if ctx.Written() { + if !issue.IsPull { return } @@ -185,10 +188,10 @@ func renderConversation(ctx *context.Context, comment *issues_model.Comment) { func SubmitReview(ctx *context.Context) { form := web.GetForm(ctx).(*forms.SubmitReviewForm) issue := GetActionIssue(ctx) - if !issue.IsPull { + if ctx.Written() { return } - if ctx.Written() { + if !issue.IsPull { return } if ctx.HasError() {