From 2705696d4d1fbfdce47bfdd0bc09f5a706974f43 Mon Sep 17 00:00:00 2001 From: zeripath Date: Thu, 1 Apr 2021 20:14:56 +0100 Subject: [PATCH] Prevent NPE in CommentMustAsDiff if no hunk header (#15199) (#15200) Backport #15199 I do not understand how this can happen or why. There is an apparent possibility for a comment.Patch to be missing a hunk header - this should not happen and do not understand how. But it appears to happen on 1.13 at least in some case. This PR will simply add a new section if the cursection is empty thus preventing the NPE. Fix #15198 Signed-off-by: Andrew Thornton Co-authored-by: 6543 <6543@obermui.de> --- services/gitdiff/gitdiff.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/services/gitdiff/gitdiff.go b/services/gitdiff/gitdiff.go index 8768b960f..18d56c174 100644 --- a/services/gitdiff/gitdiff.go +++ b/services/gitdiff/gitdiff.go @@ -1014,6 +1014,11 @@ func parseHunks(curFile *DiffFile, maxLines, maxLineCharacters int, input *bufio } diffLine := &DiffLine{Type: DiffLineAdd, RightIdx: rightLine} rightLine++ + if curSection == nil { + // Create a new section to represent this hunk + curSection = &DiffSection{} + curFile.Sections = append(curFile.Sections, curSection) + } curSection.Lines = append(curSection.Lines, diffLine) case '-': curFileLinesCount++ @@ -1026,6 +1031,11 @@ func parseHunks(curFile *DiffFile, maxLines, maxLineCharacters int, input *bufio if leftLine > 0 { leftLine++ } + if curSection == nil { + // Create a new section to represent this hunk + curSection = &DiffSection{} + curFile.Sections = append(curFile.Sections, curSection) + } curSection.Lines = append(curSection.Lines, diffLine) case ' ': curFileLinesCount++ @@ -1036,6 +1046,11 @@ func parseHunks(curFile *DiffFile, maxLines, maxLineCharacters int, input *bufio diffLine := &DiffLine{Type: DiffLinePlain, LeftIdx: leftLine, RightIdx: rightLine} leftLine++ rightLine++ + if curSection == nil { + // Create a new section to represent this hunk + curSection = &DiffSection{} + curFile.Sections = append(curFile.Sections, curSection) + } curSection.Lines = append(curSection.Lines, diffLine) default: // This is unexpected