mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	If you attempt to merge to a branch which on a PR there will be a nil pointer error in the pull request checker. This panic is uncaught and will bring down the gitea server. This PR adds protection to prevent this. Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
		@@ -351,6 +351,17 @@ func doBranchProtectPRMerge(baseCtx *APITestContext, dstPath string) func(t *tes
 | 
				
			|||||||
			pr, err = doAPICreatePullRequest(ctx, baseCtx.Username, baseCtx.Reponame, "protected", "unprotected")(t)
 | 
								pr, err = doAPICreatePullRequest(ctx, baseCtx.Username, baseCtx.Reponame, "protected", "unprotected")(t)
 | 
				
			||||||
			assert.NoError(t, err)
 | 
								assert.NoError(t, err)
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
							t.Run("GenerateCommit", func(t *testing.T) {
 | 
				
			||||||
 | 
								_, err := generateCommitWithNewData(littleSize, dstPath, "user2@example.com", "User Two", "branch-data-file-")
 | 
				
			||||||
 | 
								assert.NoError(t, err)
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							t.Run("PushToUnprotectedBranch", doGitPushTestRepository(dstPath, "origin", "protected:unprotected-2"))
 | 
				
			||||||
 | 
							var pr2 api.PullRequest
 | 
				
			||||||
 | 
							t.Run("CreatePullRequest", func(t *testing.T) {
 | 
				
			||||||
 | 
								pr2, err = doAPICreatePullRequest(ctx, baseCtx.Username, baseCtx.Reponame, "unprotected", "unprotected-2")(t)
 | 
				
			||||||
 | 
								assert.NoError(t, err)
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							t.Run("MergePR2", doAPIMergePullRequest(ctx, baseCtx.Username, baseCtx.Reponame, pr2.Index))
 | 
				
			||||||
		t.Run("MergePR", doAPIMergePullRequest(ctx, baseCtx.Username, baseCtx.Reponame, pr.Index))
 | 
							t.Run("MergePR", doAPIMergePullRequest(ctx, baseCtx.Username, baseCtx.Reponame, pr.Index))
 | 
				
			||||||
		t.Run("PullProtected", doGitPull(dstPath, "origin", "protected"))
 | 
							t.Run("PullProtected", doGitPull(dstPath, "origin", "protected"))
 | 
				
			||||||
		t.Run("ProtectProtectedBranchWhitelist", doProtectBranch(ctx, "protected", baseCtx.Username))
 | 
							t.Run("ProtectProtectedBranchWhitelist", doProtectBranch(ctx, "protected", baseCtx.Username))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -231,6 +231,10 @@ func PushToBaseRepo(pr *models.PullRequest) (err error) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}()
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := pr.LoadHeadRepo(); err != nil {
 | 
				
			||||||
 | 
							log.Error("Unable to load head repository for PR[%d] Error: %v", pr.ID, err)
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	headRepoPath := pr.HeadRepo.RepoPath()
 | 
						headRepoPath := pr.HeadRepo.RepoPath()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err := git.Clone(headRepoPath, tmpBasePath, git.CloneRepoOptions{
 | 
						if err := git.Clone(headRepoPath, tmpBasePath, git.CloneRepoOptions{
 | 
				
			||||||
@@ -247,6 +251,10 @@ func PushToBaseRepo(pr *models.PullRequest) (err error) {
 | 
				
			|||||||
		return fmt.Errorf("OpenRepository: %v", err)
 | 
							return fmt.Errorf("OpenRepository: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := pr.LoadBaseRepo(); err != nil {
 | 
				
			||||||
 | 
							log.Error("Unable to load base repository for PR[%d] Error: %v", pr.ID, err)
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if err := gitRepo.AddRemote("base", pr.BaseRepo.RepoPath(), false); err != nil {
 | 
						if err := gitRepo.AddRemote("base", pr.BaseRepo.RepoPath(), false); err != nil {
 | 
				
			||||||
		return fmt.Errorf("tmpGitRepo.AddRemote: %v", err)
 | 
							return fmt.Errorf("tmpGitRepo.AddRemote: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user