From df77cef92ec034796723ffa3adb12e8b46daa98e Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 7 Oct 2018 17:46:42 +0200 Subject: [PATCH] patch 8.1.0458: ml_get error and crash when using "do" Problem: Ml_get error and crash when using "do". Solution: Adjust cursor position also when diffupdate is not needed. (Hirohito Higashi) --- src/diff.c | 19 ++++++++++--------- src/testdir/test_diffmode.vim | 22 ++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/diff.c b/src/diff.c index d63bd9373..054924e67 100644 --- a/src/diff.c +++ b/src/diff.c @@ -2848,18 +2848,19 @@ ex_diffgetput(exarg_T *eap) theend: diff_busy = FALSE; if (diff_need_update) - { - diff_need_update = FALSE; ex_diffupdate(NULL); - } + + // Check that the cursor is on a valid character and update it's + // position. When there were filler lines the topline has become + // invalid. + check_cursor(); + changed_line_abv_curs(); + + if (diff_need_update) + // redraw already done by ex_diffupdate() + diff_need_update = FALSE; else { - // Check that the cursor is on a valid character and update it's - // position. When there were filler lines the topline has become - // invalid. - check_cursor(); - changed_line_abv_curs(); - // Also need to redraw the other buffers. diff_redraw(FALSE); apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf); diff --git a/src/testdir/test_diffmode.vim b/src/testdir/test_diffmode.vim index 760440a9b..e1da19fef 100644 --- a/src/testdir/test_diffmode.vim +++ b/src/testdir/test_diffmode.vim @@ -277,6 +277,28 @@ func Test_dp_do_buffer() %bwipe! endfunc +func Test_do_lastline() + e! one + call setline(1, ['1','2','3','4','5','6']) + diffthis + + new two + call setline(1, ['2','4','5']) + diffthis + + 1 + norm dp]c + norm dp]c + wincmd w + call assert_equal(4, line('$')) + norm G + norm do + call assert_equal(3, line('$')) + + windo diffoff + %bwipe! +endfunc + func Test_diffoff() enew! call setline(1, ['Two', 'Three']) diff --git a/src/version.c b/src/version.c index f701c2521..b25f13245 100644 --- a/src/version.c +++ b/src/version.c @@ -792,6 +792,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 458, /**/ 457, /**/ -- 2.40.0