Fix stange behavior of DownloadPullDiffOrPatch in incorect index (#17223)
Fix GetPullRequestByIndex by validate index > 1 Signed-off-by: Danila Kryukov <pricly_yellow@dismail.de> Co-authored-by: a1012112796 <1012112796@qq.com>
This commit is contained in:
		
					parent
					
						
							
								f4ea6cc4b4
							
						
					
				
			
			
				commit
				
					
						20eaca6d05
					
				
			
		
					 3 changed files with 11 additions and 17 deletions
				
			
		|  | @ -522,6 +522,9 @@ func GetLatestPullRequestByHeadInfo(repoID int64, branch string) (*PullRequest, | ||||||
| 
 | 
 | ||||||
| // GetPullRequestByIndex returns a pull request by the given index | // GetPullRequestByIndex returns a pull request by the given index | ||||||
| func GetPullRequestByIndex(repoID, index int64) (*PullRequest, error) { | func GetPullRequestByIndex(repoID, index int64) (*PullRequest, error) { | ||||||
|  | 	if index < 1 { | ||||||
|  | 		return nil, ErrPullRequestNotExist{} | ||||||
|  | 	} | ||||||
| 	pr := &PullRequest{ | 	pr := &PullRequest{ | ||||||
| 		BaseRepoID: repoID, | 		BaseRepoID: repoID, | ||||||
| 		Index:      index, | 		Index:      index, | ||||||
|  |  | ||||||
|  | @ -134,6 +134,10 @@ func TestGetPullRequestByIndex(t *testing.T) { | ||||||
| 	_, err = GetPullRequestByIndex(9223372036854775807, 9223372036854775807) | 	_, err = GetPullRequestByIndex(9223372036854775807, 9223372036854775807) | ||||||
| 	assert.Error(t, err) | 	assert.Error(t, err) | ||||||
| 	assert.True(t, IsErrPullRequestNotExist(err)) | 	assert.True(t, IsErrPullRequestNotExist(err)) | ||||||
|  | 
 | ||||||
|  | 	_, err = GetPullRequestByIndex(1, 0) | ||||||
|  | 	assert.Error(t, err) | ||||||
|  | 	assert.True(t, IsErrPullRequestNotExist(err)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestGetPullRequestByID(t *testing.T) { | func TestGetPullRequestByID(t *testing.T) { | ||||||
|  |  | ||||||
|  | @ -1322,29 +1322,16 @@ func DownloadPullPatch(ctx *context.Context) { | ||||||
| 
 | 
 | ||||||
| // DownloadPullDiffOrPatch render a pull's raw diff or patch | // DownloadPullDiffOrPatch render a pull's raw diff or patch | ||||||
| func DownloadPullDiffOrPatch(ctx *context.Context, patch bool) { | func DownloadPullDiffOrPatch(ctx *context.Context, patch bool) { | ||||||
| 	issue, err := models.GetIssueByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | 	pr, err := models.GetPullRequestByIndex(ctx.Repo.Repository.ID, ctx.ParamsInt64(":index")) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		if models.IsErrIssueNotExist(err) { | 		if models.IsErrPullRequestNotExist(err) { | ||||||
| 			ctx.NotFound("GetIssueByIndex", err) | 			ctx.NotFound("GetPullRequestByIndex", err) | ||||||
| 		} else { | 		} else { | ||||||
| 			ctx.ServerError("GetIssueByIndex", err) | 			ctx.ServerError("GetPullRequestByIndex", err) | ||||||
| 		} | 		} | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Return not found if it's not a pull request |  | ||||||
| 	if !issue.IsPull { |  | ||||||
| 		ctx.NotFound("DownloadPullDiff", |  | ||||||
| 			fmt.Errorf("Issue is not a pull request")) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if err = issue.LoadPullRequest(); err != nil { |  | ||||||
| 		ctx.ServerError("LoadPullRequest", err) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	pr := issue.PullRequest |  | ||||||
| 	binary := ctx.FormBool("binary") | 	binary := ctx.FormBool("binary") | ||||||
| 
 | 
 | ||||||
| 	if err := pull_service.DownloadDiffOrPatch(pr, ctx, patch, binary); err != nil { | 	if err := pull_service.DownloadDiffOrPatch(pr, ctx, patch, binary); err != nil { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 pricly-yellow
				pricly-yellow