mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Fix GetFilesChangedBetween if the file name may be escaped (#23272)
The code for GetFilesChangedBetween uses `git diff --name-only base..head` to get the names of files changed between base and head however this forgets that git will escape certain values. This PR simply switches to use `-z` which has the `NUL` character as the separator. Ref https://github.com/go-gitea/gitea/pull/22568#discussion_r1123138096 Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		| @@ -277,11 +277,18 @@ func (repo *Repository) GetPatch(base, head string, w io.Writer) error { | |||||||
|  |  | ||||||
| // GetFilesChangedBetween returns a list of all files that have been changed between the given commits | // GetFilesChangedBetween returns a list of all files that have been changed between the given commits | ||||||
| func (repo *Repository) GetFilesChangedBetween(base, head string) ([]string, error) { | func (repo *Repository) GetFilesChangedBetween(base, head string) ([]string, error) { | ||||||
| 	stdout, _, err := NewCommand(repo.Ctx, "diff", "--name-only").AddDynamicArguments(base + ".." + head).RunStdString(&RunOpts{Dir: repo.Path}) | 	stdout, _, err := NewCommand(repo.Ctx, "diff", "--name-only", "-z").AddDynamicArguments(base + ".." + head).RunStdString(&RunOpts{Dir: repo.Path}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	return strings.Split(stdout, "\n"), err | 	split := strings.Split(stdout, "\000") | ||||||
|  |  | ||||||
|  | 	// Because Git will always emit filenames with a terminal NUL ignore the last entry in the split - which will always be empty. | ||||||
|  | 	if len(split) > 0 { | ||||||
|  | 		split = split[:len(split)-1] | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return split, err | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetDiffFromMergeBase generates and return patch data from merge base to head | // GetDiffFromMergeBase generates and return patch data from merge base to head | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user