diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-02-21 16:25:50 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-02-21 16:25:50 +0100 |
commit | 4a7d2d3b407ed695450bb7f43166e2f2722a6836 (patch) | |
tree | f30c8ace53a50dc9328f09f2f56b403641d9e3c3 | |
parent | d91e5dafd5ec57d8e61f1a6ba3628a255785c25c (diff) | |
download | vim-git-4a7d2d3b407ed695450bb7f43166e2f2722a6836.tar.gz |
patch 8.1.0963: illegal memory access when using 'incsearch'v8.1.0963
Problem: Illegal memory access when using 'incsearch'.
Solution: Reset highlight_match when changing text. (closes #4022)
-rw-r--r-- | src/misc1.c | 5 | ||||
-rw-r--r-- | src/testdir/dumps/Test_incsearch_change_01.dump | 9 | ||||
-rw-r--r-- | src/testdir/test_search.vim | 24 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 40 insertions, 0 deletions
diff --git a/src/misc1.c b/src/misc1.c index 75f4ab1ef..65d5e9ec5 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -2854,6 +2854,11 @@ changed(void) changed_int(); } ++CHANGEDTICK(curbuf); + +#ifdef FEAT_SEARCH_EXTRA + // If a pattern is highlighted, the position may now be invalid. + highlight_match = FALSE; +#endif } /* diff --git a/src/testdir/dumps/Test_incsearch_change_01.dump b/src/testdir/dumps/Test_incsearch_change_01.dump new file mode 100644 index 000000000..96d86aae1 --- /dev/null +++ b/src/testdir/dumps/Test_incsearch_change_01.dump @@ -0,0 +1,9 @@ +|o+0&#ffffff0|n|e| @66 +|x+1&&| +0&&@68 +|t|h|r|e@1| @64 +|~+0#4040ff13&| @68 +|~| @68 +|~| @68 +|~| @68 +|~| @68 +|:+0#0000000&|%|s|/|X> @64 diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim index 0dfea49f6..5c8c2a31e 100644 --- a/src/testdir/test_search.vim +++ b/src/testdir/test_search.vim @@ -981,6 +981,30 @@ func Test_incsearch_substitute_dump() call delete('Xis_subst_script') endfunc +func Test_incsearch_with_change() + if !has('timers') || !exists('+incsearch') || !CanRunVimInTerminal() + return + endif + + call writefile([ + \ 'set incsearch hlsearch scrolloff=0', + \ 'call setline(1, ["one", "two ------ X", "three"])', + \ 'call timer_start(200, { _ -> setline(2, "x")})', + \ ], 'Xis_change_script') + let buf = RunVimInTerminal('-S Xis_change_script', {'rows': 9, 'cols': 70}) + " Give Vim a chance to redraw to get rid of the spaces in line 2 caused by + " the 'ambiwidth' check. + sleep 100m + + " Highlight X, it will be deleted by the timer callback. + call term_sendkeys(buf, ':%s/X') + call VerifyScreenDump(buf, 'Test_incsearch_change_01', {}) + call term_sendkeys(buf, "\<Esc>") + + call StopVimInTerminal(buf) + call delete('Xis_change_script') +endfunc + " Similar to Test_incsearch_substitute_dump() for :sort func Test_incsearch_sort_dump() if !exists('+incsearch') diff --git a/src/version.c b/src/version.c index 59a4e029b..30a8081f0 100644 --- a/src/version.c +++ b/src/version.c @@ -780,6 +780,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 963, +/**/ 962, /**/ 961, |