Improve memory usage when reaching diff limits (#2990)

Signed-off-by: Duncan Ogilvie <mr.exodia.tpodt@gmail.com>
This commit is contained in:
Duncan Ogilvie 2017-11-29 00:22:24 +01:00 committed by Lauris BH
parent d39b88ae88
commit c80d147fa9

View file

@ -252,19 +252,27 @@ func ParsePatch(maxLines, maxLineCharacters, maxFiles int, reader io.Reader) (*D
input := bufio.NewReader(reader) input := bufio.NewReader(reader)
isEOF := false isEOF := false
for !isEOF { for !isEOF {
line, err := input.ReadString('\n') var linebuf bytes.Buffer
for {
b, err := input.ReadByte()
if err != nil { if err != nil {
if err == io.EOF { if err == io.EOF {
isEOF = true isEOF = true
break
} else { } else {
return nil, fmt.Errorf("ReadString: %v", err) return nil, fmt.Errorf("ReadByte: %v", err)
} }
} }
if b == '\n' {
if len(line) > 0 && line[len(line)-1] == '\n' { break
// Remove line break.
line = line[:len(line)-1]
} }
if linebuf.Len() < maxLineCharacters {
linebuf.WriteByte(b)
} else if linebuf.Len() == maxLineCharacters {
curFile.IsIncomplete = true
}
}
line := linebuf.String()
if strings.HasPrefix(line, "+++ ") || strings.HasPrefix(line, "--- ") || len(line) == 0 { if strings.HasPrefix(line, "+++ ") || strings.HasPrefix(line, "--- ") || len(line) == 0 {
continue continue
@ -295,7 +303,7 @@ func ParsePatch(maxLines, maxLineCharacters, maxFiles int, reader io.Reader) (*D
lineCount++ lineCount++
// Diff data too large, we only show the first about maxLines lines // Diff data too large, we only show the first about maxLines lines
if curFileLinesCount >= maxLines || len(line) >= maxLineCharacters { if curFileLinesCount >= maxLines {
curFile.IsIncomplete = true curFile.IsIncomplete = true
} }