diff --git a/gitdiff/file_header.go b/gitdiff/file_header.go index 58904b4..77ceb5d 100644 --- a/gitdiff/file_header.go +++ b/gitdiff/file_header.go @@ -324,12 +324,12 @@ func parseGitHeaderNewName(f *File, line, defaultName string) error { } func parseGitHeaderOldMode(f *File, line, defaultName string) (err error) { - f.OldMode, err = parseMode(line) + f.OldMode, err = parseMode(strings.TrimSpace(line)) return } func parseGitHeaderNewMode(f *File, line, defaultName string) (err error) { - f.NewMode, err = parseMode(line) + f.NewMode, err = parseMode(strings.TrimSpace(line)) return } diff --git a/gitdiff/file_header_test.go b/gitdiff/file_header_test.go index 102795c..ef29833 100644 --- a/gitdiff/file_header_test.go +++ b/gitdiff/file_header_test.go @@ -486,6 +486,12 @@ func TestParseGitHeaderData(t *testing.T) { OldMode: os.FileMode(0100644), }, }, + "oldModeWithTrailingSpace": { + Line: "old mode 100644\r\n", + OutputFile: &File{ + OldMode: os.FileMode(0100644), + }, + }, "invalidOldMode": { Line: "old mode rw\n", Err: true, @@ -496,6 +502,12 @@ func TestParseGitHeaderData(t *testing.T) { NewMode: os.FileMode(0100755), }, }, + "newModeWithTrailingSpace": { + Line: "new mode 100755\r\n", + OutputFile: &File{ + NewMode: os.FileMode(0100755), + }, + }, "invalidNewMode": { Line: "new mode rwx\n", Err: true, @@ -518,6 +530,15 @@ func TestParseGitHeaderData(t *testing.T) { IsNew: true, }, }, + "newFileModeWithTrailingSpace": { + Line: "new file mode 100755\r\n", + DefaultName: "dir/file.txt", + OutputFile: &File{ + NewName: "dir/file.txt", + NewMode: os.FileMode(0100755), + IsNew: true, + }, + }, "copyFrom": { Line: "copy from dir/file.txt\n", OutputFile: &File{