aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2025-01-16 09:16:25 +0800
committerGitHub <noreply@github.com>2025-01-16 01:16:25 +0000
commit718e16536052c0e75de61a32ef237a9e87fc03f2 (patch)
treececd930e599260b75d87d508f721e2c6c7663cbd /src
parent524be56042335db589b9fe62dfdae39be3f69a15 (diff)
downloadrneovim-718e16536052c0e75de61a32ef237a9e87fc03f2.tar.gz
rneovim-718e16536052c0e75de61a32ef237a9e87fc03f2.tar.bz2
rneovim-718e16536052c0e75de61a32ef237a9e87fc03f2.zip
vim-patch:9.1.1018: v9.1.0743 causes regression with diff mode (#32047)
Problem: v9.1.0743 causes regression with diff mode Solution: Fix the regression with overlapping regions closes: vim/vim#16454 https://github.com/vim/vim/commit/01f6509fb2de1627cc4ec2c109cd0aa2e3346d50 Co-authored-by: Yukihiro Nakadaira <yukihiro.nakadaira@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/nvim/diff.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index bd98a31a71..99f70793b3 100644
--- a/src/nvim/diff.c
+++ b/src/nvim/diff.c
@@ -1622,6 +1622,11 @@ static void process_hunk(diff_T **dpp, diff_T **dprevp, int idx_orig, int idx_ne
} else {
// second overlap of new block with existing block
dp->df_count[idx_new] += (linenr_T)hunk->count_new;
+ if ((dp->df_lnum[idx_new] + dp->df_count[idx_new] - 1)
+ > curtab->tp_diffbuf[idx_new]->b_ml.ml_line_count) {
+ dp->df_count[idx_new] = curtab->tp_diffbuf[idx_new]->b_ml.ml_line_count
+ - dp->df_lnum[idx_new] + 1;
+ }
}
// Adjust the size of the block to include all the lines to the
@@ -1632,6 +1637,11 @@ static void process_hunk(diff_T **dpp, diff_T **dprevp, int idx_orig, int idx_ne
if (off < 0) {
// new change ends in existing block, adjust the end
dp->df_count[idx_new] += -off;
+ if ((dp->df_lnum[idx_new] + dp->df_count[idx_new] - 1)
+ > curtab->tp_diffbuf[idx_new]->b_ml.ml_line_count) {
+ dp->df_count[idx_new] = curtab->tp_diffbuf[idx_new]->b_ml.ml_line_count
+ - dp->df_lnum[idx_new] + 1;
+ }
off = 0;
}