Skip to content

Commit

Permalink
backport(1.15): make ParsePatch more robust (#17580)
Browse files Browse the repository at this point in the history
- Backport of #17573
  • Loading branch information
Gusted committed Nov 8, 2021
1 parent 20ae184 commit b661bba
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
11 changes: 10 additions & 1 deletion services/gitdiff/gitdiff.go
Original file line number Diff line number Diff line change
Expand Up @@ -831,7 +831,12 @@ parsingLoop:
case strings.HasPrefix(line, "--- "):
// Handle ambiguous filenames
if curFile.IsAmbiguous {
if len(line) > 6 && line[4] == 'a' {
// The shortest string that can end up here is:
// "--- a\t\n" without the qoutes.
// This line has a len() of 7 but doesn't contain a oldName.
// So the amount that the line need is at least 8 or more.
// The code will otherwise panic for a out-of-bounds.
if len(line) > 7 && line[4] == 'a' {
curFile.OldName = line[6 : len(line)-1]
if line[len(line)-2] == '\t' {
curFile.OldName = curFile.OldName[:len(curFile.OldName)-1]
Expand Down Expand Up @@ -1186,6 +1191,10 @@ func readFileName(rd *strings.Reader) (string, bool) {
_ = rd.UnreadByte()
if char == '"' {
fmt.Fscanf(rd, "%q ", &name)
if len(name) == 0 {
log.Error("Reader has no file name: %v", rd)
return "", true
}
if name[0] == '\\' {
name = name[1:]
}
Expand Down
19 changes: 19 additions & 0 deletions services/gitdiff/gitdiff_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -539,3 +539,22 @@ func TestDiffToHTML_14231(t *testing.T) {

assertEqual(t, expected, output)
}

func TestNoCrashes(t *testing.T) {
type testcase struct {
gitdiff string
}

tests := []testcase{
{
gitdiff: "diff --git \n--- a\t\n",
},
{
gitdiff: "diff --git \"0\n",
},
}
for _, testcase := range tests {
// It shouldn't crash, so don't care about the output.
ParsePatch(setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(testcase.gitdiff))
}
}

0 comments on commit b661bba

Please sign in to comment.