]> source.dussan.org Git - gitea.git/commitdiff
Prevent NPE in CommentMustAsDiff if no hunk header (#15199)
authorzeripath <art27@cantab.net>
Thu, 1 Apr 2021 18:29:14 +0000 (19:29 +0100)
committerGitHub <noreply@github.com>
Thu, 1 Apr 2021 18:29:14 +0000 (14:29 -0400)
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>
services/gitdiff/gitdiff.go

index 8768b960fc3367f1266d65904c0cfbb7e1d60638..18d56c174af58e7609b1dd2f1ba44a21e2582544 100644 (file)
@@ -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