Fix PR nil-dereference bug (#2195)

* Fix PR nil-dereference bug

* Revert to original error format
This commit is contained in:
Ethan Koenig
2017-07-26 00:16:45 -07:00
committed by Lunny Xiao
parent dde0052ca2
commit 48898e5d0b
2 changed files with 91 additions and 7 deletions

View File

@ -148,6 +148,19 @@ func (issue *Issue) loadAssignee(e Engine) (err error) {
return
}
func (issue *Issue) loadPullRequest(e Engine) (err error) {
if issue.IsPull && issue.PullRequest == nil {
issue.PullRequest, err = getPullRequestByIssueID(e, issue.ID)
if err != nil {
if IsErrPullRequestNotExist(err) {
return err
}
return fmt.Errorf("getPullRequestByIssueID [%d]: %v", issue.ID, err)
}
}
return nil
}
func (issue *Issue) loadAttributes(e Engine) (err error) {
if err = issue.loadRepo(e); err != nil {
return
@ -172,12 +185,9 @@ func (issue *Issue) loadAttributes(e Engine) (err error) {
return
}
if issue.IsPull && issue.PullRequest == nil {
if err = issue.loadPullRequest(e); err != nil && !IsErrPullRequestNotExist(err) {
// It is possible pull request is not yet created.
issue.PullRequest, err = getPullRequestByIssueID(e, issue.ID)
if err != nil && !IsErrPullRequestNotExist(err) {
return fmt.Errorf("getPullRequestByIssueID [%d]: %v", issue.ID, err)
}
return err
}
if issue.Attachments == nil {
@ -321,8 +331,15 @@ func (issue *Issue) HasLabel(labelID int64) bool {
func (issue *Issue) sendLabelUpdatedWebhook(doer *User) {
var err error
if issue.IsPull {
err = issue.PullRequest.LoadIssue()
if err != nil {
if err = issue.loadRepo(x); err != nil {
log.Error(4, "loadRepo: %v", err)
return
}
if err = issue.loadPullRequest(x); err != nil {
log.Error(4, "loadPullRequest: %v", err)
return
}
if err = issue.PullRequest.LoadIssue(); err != nil {
log.Error(4, "LoadIssue: %v", err)
return
}
@ -430,6 +447,8 @@ func (issue *Issue) ClearLabels(doer *User) (err error) {
if err := issue.loadRepo(sess); err != nil {
return err
} else if err = issue.loadPullRequest(sess); err != nil {
return err
}
if has, err := hasAccess(sess, doer.ID, issue.Repo, AccessModeWrite); err != nil {