summaryrefslogtreecommitdiffstats
path: root/services/gitdiff/gitdiff.go
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2021-04-01 19:29:14 +0100
committerGitHub <noreply@github.com>2021-04-01 14:29:14 -0400
commita351b22dc0319a99ef68048529e533c7e91a9c8c (patch)
treecc0252f37489cf8c25ae4139cf0f38cf6c01dd2f /services/gitdiff/gitdiff.go
parentff460ca74d37b1eadac63b8858d0daa1690e0e2f (diff)
downloadgitea-a351b22dc0319a99ef68048529e533c7e91a9c8c.tar.gz
gitea-a351b22dc0319a99ef68048529e533c7e91a9c8c.zip
Prevent NPE in CommentMustAsDiff if no hunk header (#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 <art27@cantab.net> Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'services/gitdiff/gitdiff.go')
-rw-r--r--services/gitdiff/gitdiff.go15
1 files changed, 15 insertions, 0 deletions
diff --git a/services/gitdiff/gitdiff.go b/services/gitdiff/gitdiff.go
index 8768b960fc..18d56c174a 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