mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 03:18:24 +00:00 
			
		
		
		
	Prevent panic on diff generation (#16950)
The lastLeftIdx should be reset at the same time as creating a new section otherwise it is possible for a second addition to end up attempting to read a nil entry. Fix #16943 Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		| @@ -996,6 +996,7 @@ func parseHunks(curFile *DiffFile, maxLines, maxLineCharacters int, input *bufio | ||||
|  | ||||
| 			// Create a new section to represent this hunk | ||||
| 			curSection = &DiffSection{} | ||||
| 			lastLeftIdx = -1 | ||||
| 			curFile.Sections = append(curFile.Sections, curSection) | ||||
|  | ||||
| 			lineSectionInfo := getDiffLineSectionInfo(curFile.Name, line, leftLine-1, rightLine-1) | ||||
| @@ -1036,6 +1037,7 @@ func parseHunks(curFile *DiffFile, maxLines, maxLineCharacters int, input *bufio | ||||
| 				// Create a new section to represent this hunk | ||||
| 				curSection = &DiffSection{} | ||||
| 				curFile.Sections = append(curFile.Sections, curSection) | ||||
| 				lastLeftIdx = -1 | ||||
| 			} | ||||
| 			if lastLeftIdx > -1 { | ||||
| 				diffLine.Match = lastLeftIdx | ||||
| @@ -1061,6 +1063,7 @@ func parseHunks(curFile *DiffFile, maxLines, maxLineCharacters int, input *bufio | ||||
| 				// Create a new section to represent this hunk | ||||
| 				curSection = &DiffSection{} | ||||
| 				curFile.Sections = append(curFile.Sections, curSection) | ||||
| 				lastLeftIdx = -1 | ||||
| 			} | ||||
| 			if len(curSection.Lines) == 0 || curSection.Lines[len(curSection.Lines)-1].Type != DiffLineDel { | ||||
| 				lastLeftIdx = len(curSection.Lines) | ||||
| @@ -1121,6 +1124,7 @@ func parseHunks(curFile *DiffFile, maxLines, maxLineCharacters int, input *bufio | ||||
| 					curFile.IsBin = true | ||||
| 					curFile.IsLFSFile = true | ||||
| 					curSection.Lines = nil | ||||
| 					lastLeftIdx = -1 | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user