From d64417a6fa801b36af39383a6057e3aff3a03bcd Mon Sep 17 00:00:00 2001 From: Jason Song Date: Fri, 7 Jul 2023 15:59:16 +0800 Subject: [PATCH] Check `ctx.Written()` for `GetActionIssue` (#25698) (#25714) Backport #25698. Fix #25697. Just avoid panic, maybe there's another bug to trigger this case. Co-authored-by: Giteabot (cherry picked from commit 53276d3e4954cb0ea853d6441f08f96b11c0487c) --- routers/web/repo/issue.go | 5 ++++- routers/web/repo/issue_content_history.go | 10 +++++----- routers/web/repo/pull.go | 2 +- routers/web/repo/pull_review.go | 11 +++++++---- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 1d480096a9..616e08e4d8 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -1888,7 +1888,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 @@ -3185,6 +3185,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 7e5295e757..49e0d6613d 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/pull.go b/routers/web/repo/pull.go index 830c8ad626..91869818dc 100644 --- a/routers/web/repo/pull.go +++ b/routers/web/repo/pull.go @@ -1455,10 +1455,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 d43a786c56..7c13e76423 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() {