From 0126e3fc1317cf7a1ef0fd5ad1af460be547701e Mon Sep 17 00:00:00 2001 From: Max Kostyukevich Date: Tue, 20 Aug 2019 03:08:32 +0300 Subject: apply: Fix a patch corruption related to EOFNL handling Use of apply's API can lead to an improper patch application and a corruption of the modified file. The issue is caused by mishandling of the end of file changes if there are several hunks to apply. The new line character is added to a line from a wrong hunk. The solution is to modify apply_hunk() to add the newline character at the end of a line from a right hunk. --- src/apply.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apply.c b/src/apply.c index 3ec63f2fb..982d9af32 100644 --- a/src/apply.c +++ b/src/apply.c @@ -210,7 +210,7 @@ static int apply_hunk( case GIT_DIFF_LINE_CONTEXT_EOFNL: case GIT_DIFF_LINE_DEL_EOFNL: case GIT_DIFF_LINE_ADD_EOFNL: - prev = i ? git_array_get(patch->lines, i - 1) : NULL; + prev = i ? git_array_get(patch->lines, linenum - 1) : NULL; if (prev && prev->content[prev->content_len - 1] == '\n') prev->content_len -= 1; break; -- cgit v1.2.1