diff --git a/backport-CVE-2021-3875.patch b/backport-CVE-2021-3875.patch index ac923907a424620b69f19f699c83473e85837db8..db3cf9a0297bfd082b84e7a21a833bb0053ef443 100644 --- a/backport-CVE-2021-3875.patch +++ b/backport-CVE-2021-3875.patch @@ -7,8 +7,7 @@ Problem: ml_get error after search with range. Solution: Limit the line number to the buffer line count. --- src/ex_docmd.c | 6 ++++-- - src/testdir/test_search.vim | 14 ++++++++++++++ - 2 files changed, 18 insertions(+), 2 deletions(-) + 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 76daf43..12554fa 100644 @@ -27,28 +26,6 @@ index 76daf43..12554fa 100644 // Start a forward search at the end of the line (unless // before the first line). -diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim -index 1876713..ac0881c 100644 ---- a/src/testdir/test_search.vim -+++ b/src/testdir/test_search.vim -@@ -1366,3 +1366,17 @@ func Test_searchdecl() - - bwipe! - endfunc -+ -+func Test_search_with_invalid_range() -+ new -+ let lines =<< trim END -+ /\%.v -+ 5/ -+ c -+ END -+ call writefile(lines, 'Xrangesearch') -+ source Xrangesearch -+ -+ bwipe! -+ call delete('Xrangesearch') -+endfunc -- 2.27.0 diff --git a/backport-CVE-2022-0351.patch b/backport-CVE-2022-0351.patch index a9096830b8ed7a9fed026e25661da94c3dc972d9..fdda8ed5ccb5466b5ef2e88e891313b74d9ce653 100644 --- a/backport-CVE-2022-0351.patch +++ b/backport-CVE-2022-0351.patch @@ -71,7 +71,7 @@ index ec566da..32a5411 100644 + +func Test_deep_recursion() + " this was running out of stack -+ call assert_fails("exe 'if ' .. repeat('(', 1002)", 'E1169: Expression too recursive: ((')+endfunc ++ call assert_fails("exe 'if ' .. repeat('(', 1002)", 'E1169: Expression too recursive: ((') +endfunc -- 1.8.3.1 diff --git a/backport-block-insert-with-double-wide-character-fails.patch b/backport-block-insert-with-double-wide-character-fails.patch new file mode 100644 index 0000000000000000000000000000000000000000..b04e34239744d4675fad17764a8fe1c1cc877ffb --- /dev/null +++ b/backport-block-insert-with-double-wide-character-fails.patch @@ -0,0 +1,26 @@ +From fc6ccebea668c49e9e617e0657421b6a8ed9df1e Mon Sep 17 00:00:00 2001 +From: Bram Moolenaar +Date: Thu, 20 Jan 2022 12:22:35 +0000 +Subject: [PATCH] patch 8.2.4152: block insert with double wide character fails +Problem: Block insert with double wide character fails. +Solution: Adjust the expected output. +Reference:https://github.com/vim/vim/commit/fc6ccebea668c49e9e617e0657421b6a8ed9df1e +Conflict:Conflict:The src/version.c file is not modified. +--- + src/testdir/test_utf8.vim | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) +diff --git a/src/testdir/test_utf8.vim b/src/testdir/test_utf8.vim +index 42a46fd..32cec0f 100644 +--- a/src/testdir/test_utf8.vim ++++ b/src/testdir/test_utf8.vim +@@ -7,7 +7,7 @@ func Test_visual_block_insert() + new + call setline(1, ["aaa", "あああ", "bbb"]) + exe ":norm! gg0l\jjIx\" +- call assert_equal(['axaa', 'xあああ', 'bxbb'], getline(1, '$')) ++ call assert_equal(['axaa', ' xあああ', 'bxbb'], getline(1, '$')) + bwipeout! + endfunc + +-- +2.27.0 diff --git a/backport-bracketed-paste-can-still-cause-invalid-memory-acces.patch b/backport-bracketed-paste-can-still-cause-invalid-memory-acces.patch new file mode 100644 index 0000000000000000000000000000000000000000..193e9891908fb1b330f96644bddd3935ebcf4879 --- /dev/null +++ b/backport-bracketed-paste-can-still-cause-invalid-memory-acces.patch @@ -0,0 +1,42 @@ +From fe4bbac1166f2e4e3fa18cb966ec7305198c8176 Mon Sep 17 00:00:00 2001 +From: Bram Moolenaar +Date: Mon, 20 Jan 2020 21:12:20 +0100 +Subject: [PATCH] patch 8.2.0135: bracketed paste can still cause invalid + memory access +Problem: Bracketed paste can still cause invalid memory access. (Dominique + Pelle) +Solution: Check for NULL pointer. +Reference:https://github.com/vim/vim/commit/fe4bbac1166f2e4e3fa18cb966ec7305198c8176 +Conflict:The src/version.c file is not modified. +--- + src/edit.c | 2 +- + src/testdir/test_search.vim | 3 ++- + 2 files changed, 3 insertions(+), 2 deletions(-) +diff --git a/src/edit.c b/src/edit.c +index f822a79..1b7d368 100644 +--- a/src/edit.c ++++ b/src/edit.c +@@ -4942,7 +4942,7 @@ bracketed_paste(paste_mode_T mode, int drop, garray_T *gap) + int save_paste = p_paste; + + // If the end code is too long we can't detect it, read everything. +- if (STRLEN(end) >= NUMBUFLEN) ++ if (end != NULL && STRLEN(end) >= NUMBUFLEN) + end = NULL; + ++no_mapping; + allow_keys = 0; +diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim +index c8020eb..4bf0b2d 100644 +--- a/src/testdir/test_search.vim ++++ b/src/testdir/test_search.vim +@@ -1368,6 +1368,7 @@ func Test_searchdecl() + endfunc + + func Test_search_special() +- " this was causing illegal memory access ++ " this was causing illegal memory access and an endless loop ++ set t_PE= + exe "norm /\x80PS" + endfunc +-- +2.27.0 diff --git a/backport-cannot-use-z-when-spell-is-off.patch b/backport-cannot-use-z-when-spell-is-off.patch new file mode 100644 index 0000000000000000000000000000000000000000..87af95c4f58700fabe1374197df174f6a5035426 --- /dev/null +++ b/backport-cannot-use-z-when-spell-is-off.patch @@ -0,0 +1,260 @@ +From 152e79e94bb935e75b866bd55479648cde11066a Mon Sep 17 00:00:00 2001 +From: Bram Moolenaar +Date: Wed, 10 Jun 2020 15:32:08 +0200 +Subject: [PATCH] patch 8.2.0945: cannot use "z=" when 'spell' is off + +Reference:https://github.com/vim/vim/commit/152e79e94bb935e75b866bd55479648cde11066a +Conflict:The software package does not contain the Test_spellsuggest function. + +Problem: Cannot use "z=" when 'spell' is off. +Solution: Make "z=" work even when 'spell' is off. (Christian Brabandt, + Gary Johnson, closes #6227) +--- + runtime/doc/eval.txt | 8 +++---- + src/evalfunc.c | 46 ++++++++++++++++++++++++++++++++++++-- + src/globals.h | 3 +++ + src/spell.c | 2 +- + src/spellsuggest.c | 13 ++++++++++- + src/testdir/test_spell.vim | 37 +++++++++++++++++++++++++++--- + 6 files changed, 97 insertions(+), 12 deletions(-) + +diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt +index b28fac9..1aeb193 100644 +--- a/runtime/doc/eval.txt ++++ b/runtime/doc/eval.txt +@@ -9071,9 +9071,8 @@ spellbadword([{sentence}]) + echo spellbadword("the quik brown fox") + < ['quik', 'bad'] ~ + +- The spelling information for the current window is used. The +- 'spell' option must be set and the value of 'spelllang' is +- used. ++ The spelling information for the current window and the value ++ of 'spelllang' are used. + + Can also be used as a |method|: > + GetText()->spellbadword() +@@ -9098,8 +9097,7 @@ spellsuggest({word} [, {max} [, {capital}]]) + although it may appear capitalized. + + The spelling information for the current window is used. The +- 'spell' option must be set and the values of 'spelllang' and +- 'spellsuggest' are used. ++ values of 'spelllang' and 'spellsuggest' are used. + + Can also be used as a |method|: > + GetWord()->spellsuggest() +diff --git a/src/evalfunc.c b/src/evalfunc.c +index 892a753..24bd7b1 100644 +--- a/src/evalfunc.c ++++ b/src/evalfunc.c +@@ -6903,9 +6903,30 @@ f_spellbadword(typval_T *argvars UNUSED, typval_T *rettv) + char_u *word = (char_u *)""; + hlf_T attr = HLF_COUNT; + int len = 0; ++#ifdef FEAT_SPELL ++ int wo_spell_save = curwin->w_p_spell; ++ ++ if (!curwin->w_p_spell) ++ { ++ did_set_spelllang(curwin); ++ curwin->w_p_spell = TRUE; ++ } ++ ++ if (*curwin->w_s->b_p_spl == NUL) ++ { ++ emsg(_(e_no_spell)); ++ curwin->w_p_spell = wo_spell_save; ++ return; ++ } ++#endif + + if (rettv_list_alloc(rettv) == FAIL) ++ { ++#ifdef FEAT_SPELL ++ curwin->w_p_spell = wo_spell_save; ++#endif + return; ++ } + + #ifdef FEAT_SPELL + if (argvars[0].v_type == VAR_UNKNOWN) +@@ -6918,7 +6939,7 @@ f_spellbadword(typval_T *argvars UNUSED, typval_T *rettv) + curwin->w_set_curswant = TRUE; + } + } +- else if (curwin->w_p_spell && *curbuf->b_s.b_p_spl != NUL) ++ else if (*curbuf->b_s.b_p_spl != NUL) + { + char_u *str = tv_get_string_chk(&argvars[0]); + int capcol = -1; +@@ -6940,6 +6961,7 @@ f_spellbadword(typval_T *argvars UNUSED, typval_T *rettv) + } + } + } ++ curwin->w_p_spell = wo_spell_save; + #endif + + list_append_string(rettv->vval.v_list, word, len); +@@ -6965,13 +6987,32 @@ f_spellsuggest(typval_T *argvars UNUSED, typval_T *rettv) + int i; + listitem_T *li; + int need_capital = FALSE; ++ int wo_spell_save = curwin->w_p_spell; ++ ++ if (!curwin->w_p_spell) ++ { ++ did_set_spelllang(curwin); ++ curwin->w_p_spell = TRUE; ++ } ++ ++ if (*curwin->w_s->b_p_spl == NUL) ++ { ++ emsg(_(e_no_spell)); ++ curwin->w_p_spell = wo_spell_save; ++ return; ++ } + #endif + + if (rettv_list_alloc(rettv) == FAIL) ++ { ++#ifdef FEAT_SPELL ++ curwin->w_p_spell = wo_spell_save; ++#endif + return; ++ } + + #ifdef FEAT_SPELL +- if (curwin->w_p_spell && *curwin->w_s->b_p_spl != NUL) ++ if (*curwin->w_s->b_p_spl != NUL) + { + str = tv_get_string(&argvars[0]); + if (argvars[1].v_type != VAR_UNKNOWN) +@@ -7008,6 +7049,7 @@ f_spellsuggest(typval_T *argvars UNUSED, typval_T *rettv) + } + ga_clear(&ga); + } ++ curwin->w_p_spell = wo_spell_save; + #endif + } + +diff --git a/src/globals.h b/src/globals.h +index 77a42d8..bdda224 100644 +--- a/src/globals.h ++++ b/src/globals.h +@@ -1492,6 +1492,9 @@ EXTERN char e_invcmd[] INIT(= N_("E476: Invalid command")); + #if defined(UNIX) || defined(FEAT_SYN_HL) || defined(FEAT_SPELL) + EXTERN char e_isadir2[] INIT(= N_("E17: \"%s\" is a directory")); + #endif ++#ifdef FEAT_SPELL ++EXTERN char e_no_spell[] INIT(= N_("E756: Spell checking is not possible")); ++#endif + #ifdef FEAT_LIBCALL + EXTERN char e_libcall[] INIT(= N_("E364: Library call failed for \"%s()\"")); + #endif +diff --git a/src/spell.c b/src/spell.c +index 572f7fb..d8310fa 100644 +--- a/src/spell.c ++++ b/src/spell.c +@@ -1225,7 +1225,7 @@ no_spell_checking(win_T *wp) + if (!wp->w_p_spell || *wp->w_s->b_p_spl == NUL + || wp->w_s->b_langp.ga_len == 0) + { +- emsg(_("E756: Spell checking is not enabled")); ++ emsg(_(e_no_spell)); + return TRUE; + } + return FALSE; +diff --git a/src/spellsuggest.c b/src/spellsuggest.c +index 9d6df79..06e0ad1 100644 +--- a/src/spellsuggest.c ++++ b/src/spellsuggest.c +@@ -471,9 +471,19 @@ spell_suggest(int count) + int selected = count; + int badlen = 0; + int msg_scroll_save = msg_scroll; ++ int wo_spell_save = curwin->w_p_spell; + +- if (no_spell_checking(curwin)) ++ if (!curwin->w_p_spell) ++ { ++ did_set_spelllang(curwin); ++ curwin->w_p_spell = TRUE; ++ } ++ ++ if (*curwin->w_s->b_p_spl == NUL) ++ { ++ emsg(_(e_no_spell)); + return; ++ } + + if (VIsual_active) + { +@@ -687,6 +697,7 @@ spell_suggest(int count) + spell_find_cleanup(&sug); + skip: + vim_free(line); ++ curwin->w_p_spell = wo_spell_save; + } + + /* +diff --git a/src/testdir/test_spell.vim b/src/testdir/test_spell.vim +index 79fb892..f10ec61 100644 +--- a/src/testdir/test_spell.vim ++++ b/src/testdir/test_spell.vim +@@ -99,11 +99,14 @@ foobar/? + set spelllang=Xwords.spl + call assert_equal(['foobar', 'rare'], spellbadword('foo foobar')) + +- " Typo should not be detected without the 'spell' option. ++ " Typo should be detected even without the 'spell' option. + set spelllang=en_gb nospell + call assert_equal(['', ''], spellbadword('centre')) +- call assert_equal(['', ''], spellbadword('My bycycle.')) +- call assert_equal(['', ''], spellbadword('A sentence. another sentence')) ++ call assert_equal(['bycycle', 'bad'], spellbadword('My bycycle.')) ++ call assert_equal(['another', 'caps'], spellbadword('A sentence. another sentence')) ++ ++ set spelllang= ++ call assert_fails("call spellbadword('maxch')", 'E756:') + + call delete('Xwords.spl') + call delete('Xwords') +@@ -415,6 +418,34 @@ func Test_zeq_crash() + bwipe! + endfunc + ++" Check that z= works even when 'nospell' is set. This test uses one of the ++" tests in Test_spellsuggest_option_number() just to verify that z= basically ++" works and that "E756: Spell checking is not enabled" is not generated. ++func Test_zeq_nospell() ++ new ++ set nospell spellsuggest=1,best ++ call setline(1, 'A baord') ++ try ++ norm $1z= ++ call assert_equal('A board', getline(1)) ++ catch ++ call assert_report("Caught exception: " . v:exception) ++ endtry ++ set spell& spellsuggest& ++ bwipe! ++endfunc ++ ++" Check that "E756: Spell checking is not possible" is reported when z= is ++" executed and 'spelllang' is empty. ++func Test_zeq_no_spelllang() ++ new ++ set spelllang= spellsuggest=1,best ++ call setline(1, 'A baord') ++ call assert_fails('normal $1z=', 'E756:') ++ set spelllang& spellsuggest& ++ bwipe! ++endfunc ++ + " Check handling a word longer than MAXWLEN. + func Test_spell_long_word() + set enc=utf-8 +-- +2.27.0 + diff --git a/backport-command-line-editing-not-sufficiently-tested.patch b/backport-command-line-editing-not-sufficiently-tested.patch new file mode 100644 index 0000000000000000000000000000000000000000..337e0fab0a96c62abb5c1b4c4f39578026f472ec --- /dev/null +++ b/backport-command-line-editing-not-sufficiently-tested.patch @@ -0,0 +1,101 @@ +From 59cb041d0a56d8555857da7e063ec61504ee1fa7 Mon Sep 17 00:00:00 2001 +From: Bram Moolenaar +Date: Wed, 18 Dec 2019 22:26:31 +0100 +Subject: [PATCH] patch 8.2.0023: command line editing not sufficiently tested +Problem: Command line editing not sufficiently tested. +Solution: Add more tests. (Dominique Pelle, closes #5374) +Reference:https://github.com/vim/vim/commit/59cb041d0a56d8555857da7e063ec61504ee1fa7 +Conflict:don't change src/testdir/test_cmdline.vim file. isrc/testdir/test_ex_mode.vim file +needs to be introduced to fix the CVE-2022-0359,so only change src/testdir/test_ex_mode.vim +--- + src/testdir/Make_all.mak | 1 + + src/testdir/test_alot.vim | 1 + + src/testdir/test_ex_mode.vim | 54 ++++++++++++++++++++++++++++++++++++ + 3 files changed, 56 insertions(+) + create mode 100644 src/testdir/test_ex_mode.vim +diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak +index 665bcc7..05e7a2c 100644 +--- a/src/testdir/Make_all.mak ++++ b/src/testdir/Make_all.mak +@@ -102,6 +102,7 @@ NEW_TESTS = \ + test_ex_equal \ + test_ex_undo \ + test_ex_z \ ++ test_ex_mode \ + test_excmd \ + test_exec_while_if \ + test_execute_func \ +diff --git a/src/testdir/test_alot.vim b/src/testdir/test_alot.vim +index 894ec58..25241b2 100644 +--- a/src/testdir/test_alot.vim ++++ b/src/testdir/test_alot.vim +@@ -13,6 +13,7 @@ source test_delete.vim + source test_ex_equal.vim + source test_ex_undo.vim + source test_ex_z.vim ++source test_ex_mode.vim + source test_execute_func.vim + source test_expand.vim + source test_expand_dllpath.vim +diff --git a/src/testdir/test_ex_mode.vim b/src/testdir/test_ex_mode.vim +new file mode 100644 +index 0000000..00a35a3 +--- /dev/null ++++ b/src/testdir/test_ex_mode.vim +@@ -0,0 +1,54 @@ ++" Test editing line in Ex mode (see :help Q and :help gQ). ++ ++" Helper function to test editing line in Q Ex mode ++func Ex_Q(cmd) ++ " Is there a simpler way to test editing Ex line? ++ call feedkeys("Q" ++ \ .. "let s:test_ex =<< END\" ++ \ .. a:cmd .. "\" ++ \ .. "END\" ++ \ .. "visual\", 'tx') ++ return s:test_ex[0] ++endfunc ++ ++" Helper function to test editing line in gQ Ex mode ++func Ex_gQ(cmd) ++ call feedkeys("gQ" .. a:cmd .. "\\"\", 'tx') ++ let ret = @:[1:] " Remove leading quote. ++ call feedkeys("visual\", 'tx') ++ return ret ++endfunc ++ ++" Helper function to test editing line with both Q and gQ Ex mode. ++func Ex(cmd) ++ return [Ex_Q(a:cmd), Ex_gQ(a:cmd)] ++endfunc ++ ++" Test editing line in Ex mode (both Q and gQ) ++func Test_ex_mode() ++ let encoding_save = &encoding ++ set sw=2 ++ ++ for e in ['utf8', 'latin1'] ++ exe 'set encoding=' . e ++ ++ call assert_equal(['bar', 'bar'], Ex("foo bar\bar"), e) ++ call assert_equal(["1\2", "1\2"], Ex("1\\2"), e) ++ call assert_equal(["1\2\3", '213'], Ex("1\2\3"), e) ++ call assert_equal(['0123', '2013'], Ex("01\2\3"), e) ++ call assert_equal(['0123', '0213'], Ex("01\2\3"), e) ++ call assert_equal(['01234', '0342'], Ex("012\\\3\4"), e) ++ call assert_equal(["foo bar\", 'foo '], Ex("foo bar\"), e) ++ call assert_equal(['foo', 'foo'], Ex("fooba\\"), e) ++ call assert_equal(["foo\tbar", 'foobar'], Ex("foo\bar"), e) ++ call assert_equal(["abbrev\t", 'abbreviate'], Ex("abbrev\"), e) ++ call assert_equal([' 1', "1\\"], Ex("1\\"), e) ++ call assert_equal([' 1', "1\\"], Ex("1\\\"), e) ++ call assert_equal([' foo', ' foo'], Ex(" foo\"), e) ++ call assert_equal(['foo', ' foo0'], Ex(" foo0\"), e) ++ call assert_equal(['foo', ' foo^'], Ex(" foo^\"), e) ++ endfor ++ ++ set sw& ++ let &encoding = encoding_save ++endfunc +-- +2.27.0 diff --git a/backport-invalid-memory-access-with-search-command.patch b/backport-invalid-memory-access-with-search-command.patch new file mode 100644 index 0000000000000000000000000000000000000000..4f29f70dc8a87f15a6589a8199354f77ea1c20b7 --- /dev/null +++ b/backport-invalid-memory-access-with-search-command.patch @@ -0,0 +1,44 @@ +From 98a336dd497d3422e7efeef9f24cc9e25aeb8a49 Mon Sep 17 00:00:00 2001 +From: Bram Moolenaar +Date: Mon, 20 Jan 2020 20:22:30 +0100 +Subject: [PATCH] patch 8.2.0133: invalid memory access with search command +Problem: Invalid memory access with search command. +Solution: When :normal runs out of characters in bracketed paste mode break + out of the loop.(closes #5511) +Reference:https://github.com/vim/vim/commit/98a336dd497d3422e7efeef9f24cc9e25aeb8a49 +Conflict:The src/version.c file is not modified. +--- + src/edit.c | 4 ++-- + src/testdir/test_search.vim | 5 +++++ + 2 files changed, 7 insertions(+), 2 deletions(-) +diff --git a/src/edit.c b/src/edit.c +index d2e45dd..f822a79 100644 +--- a/src/edit.c ++++ b/src/edit.c +@@ -4959,9 +4959,9 @@ bracketed_paste(paste_mode_T mode, int drop, garray_T *gap) + do + c = vgetc(); + while (c == K_IGNORE || c == K_VER_SCROLLBAR || c == K_HOR_SCROLLBAR); +- if (c == NUL || got_int) ++ if (c == NUL || got_int || (ex_normal_busy > 0 && c == Ctrl_C)) + // When CTRL-C was encountered the typeahead will be flushed and we +- // won't get the end sequence. ++ // won't get the end sequence. Except when using ":normal". + break; + + if (has_mbyte) +diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim +index 1876713..c8020eb 100644 +--- a/src/testdir/test_search.vim ++++ b/src/testdir/test_search.vim +@@ -1366,3 +1366,8 @@ func Test_searchdecl() + + bwipe! + endfunc ++ ++func Test_search_special() ++ " this was causing illegal memory access ++ exe "norm /\x80PS" ++endfunc +-- +2.27.0 diff --git a/remove-failed-tests-due-to-patch.patch b/remove-failed-tests-due-to-patch.patch new file mode 100644 index 0000000000000000000000000000000000000000..fd98da717f947b344fc1fdc0476cd7d04b06b73b --- /dev/null +++ b/remove-failed-tests-due-to-patch.patch @@ -0,0 +1,779 @@ +From ca7a7ce78d3c12d4c9ed458a7c67866be60aabe8 Mon Sep 17 00:00:00 2001 +From: wangshouping +Date: Sat, 6 Mar 2021 20:55:26 +0800 +Subject: [PATCH] remove test cases of failure due to patch + +reason: Remove test cases of failure due to vim-7.4-syntax.patch/ + vim-8.0-copy-paste.patch/vim-7.4-syncolor.patch. + +Signed-off-by: wangshouping +--- + src/testdir/test_balloon.vim | 47 ---- + src/testdir/test_diffmode.vim | 181 ---------------- + src/testdir/test_filetype.vim | 9 - + src/testdir/test_popupwin.vim | 285 ------------------------- + src/testdir/test_popupwin_textprop.vim | 166 -------------- + 5 files changed, 688 deletions(-) + +diff --git a/src/testdir/test_balloon.vim b/src/testdir/test_balloon.vim +index f32b73c..b7d1a15 100644 +--- a/src/testdir/test_balloon.vim ++++ b/src/testdir/test_balloon.vim +@@ -17,50 +17,3 @@ let s:common_script =<< trim [CODE] + redraw + [CODE] + +-func Test_balloon_eval_term() +- " Use after to return from vgetc() without removing +- " the balloon. +- let xtra_lines =<< trim [CODE] +- set updatetime=300 +- au CursorHold * echo 'hold fired' +- func Trigger() +- call test_setmouse(2, 6) +- call feedkeys("\\", "xt") +- endfunc +- [CODE] +- call writefile(s:common_script + xtra_lines, 'XTest_beval') +- +- " Check that the balloon shows up after a mouse move +- let buf = RunVimInTerminal('-S XTest_beval', {'rows': 10, 'cols': 50}) +- call term_wait(buf, 100) +- call term_sendkeys(buf, 'll') +- call term_sendkeys(buf, ":call Trigger()\") +- call VerifyScreenDump(buf, 'Test_balloon_eval_term_01', {}) +- +- " Make sure the balloon still shows after 'updatetime' passed and CursorHold +- " was triggered. +- call term_wait(buf, 300) +- call VerifyScreenDump(buf, 'Test_balloon_eval_term_01a', {}) +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('XTest_beval') +-endfunc +- +-func Test_balloon_eval_term_visual() +- " Use after to return from vgetc() without removing +- " the balloon. +- call writefile(s:common_script + [ +- \ 'call test_setmouse(3, 6)', +- \ 'call feedkeys("3Gevfr\\", "xt")', +- \ ], 'XTest_beval_visual') +- +- " Check that the balloon shows up after a mouse move +- let buf = RunVimInTerminal('-S XTest_beval_visual', {'rows': 10, 'cols': 50}) +- call term_wait(buf, 100) +- call VerifyScreenDump(buf, 'Test_balloon_eval_term_02', {}) +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('XTest_beval_visual') +-endfunc +diff --git a/src/testdir/test_diffmode.vim b/src/testdir/test_diffmode.vim +index 9dfe2fe..61edbe2 100644 +--- a/src/testdir/test_diffmode.vim ++++ b/src/testdir/test_diffmode.vim +@@ -748,163 +748,6 @@ func VerifyInternal(buf, dumpfile, extra) + call VerifyScreenDump(a:buf, a:dumpfile, {}) + endfunc + +-func Test_diff_screen() +- CheckScreendump +- CheckFeature menu +- +- " clean up already existing swap files, just in case +- call delete('.Xfile1.swp') +- call delete('.Xfile2.swp') +- +- " Test 1: Add a line in beginning of file 2 +- call WriteDiffFiles(0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) +- let buf = RunVimInTerminal('-d Xfile1 Xfile2', {}) +- " Set autoread mode, so that Vim won't complain once we re-write the test +- " files +- call term_sendkeys(buf, ":set autoread\\w:set autoread\\w") +- +- call VerifyBoth(buf, 'Test_diff_01', '') +- +- " Test 2: Add a line in beginning of file 1 +- call WriteDiffFiles(buf, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) +- call VerifyBoth(buf, 'Test_diff_02', '') +- +- " Test 3: Add a line at the end of file 2 +- call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) +- call VerifyBoth(buf, 'Test_diff_03', '') +- +- " Test 4: Add a line at the end of file 1 +- call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) +- call VerifyBoth(buf, 'Test_diff_04', '') +- +- " Test 5: Add a line in the middle of file 2, remove on at the end of file 1 +- call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10]) +- call VerifyBoth(buf, 'Test_diff_05', '') +- +- " Test 6: Add a line in the middle of file 1, remove on at the end of file 2 +- call WriteDiffFiles(buf, [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) +- call VerifyBoth(buf, 'Test_diff_06', '') +- +- " Variants on test 6 with different context settings +- call term_sendkeys(buf, ":set diffopt+=context:2\") +- call VerifyScreenDump(buf, 'Test_diff_06.2', {}) +- call term_sendkeys(buf, ":set diffopt-=context:2\") +- call term_sendkeys(buf, ":set diffopt+=context:1\") +- call VerifyScreenDump(buf, 'Test_diff_06.1', {}) +- call term_sendkeys(buf, ":set diffopt-=context:1\") +- call term_sendkeys(buf, ":set diffopt+=context:0\") +- call VerifyScreenDump(buf, 'Test_diff_06.0', {}) +- call term_sendkeys(buf, ":set diffopt-=context:0\") +- +- " Test 7 - 9: Test normal/patience/histogram diff algorithm +- call WriteDiffFiles(buf, ['#include ', '', '// Frobs foo heartily', 'int frobnitz(int foo)', '{', +- \ ' int i;', ' for(i = 0; i < 10; i++)', ' {', ' printf("Your answer is: ");', +- \ ' printf("%d\n", foo);', ' }', '}', '', 'int fact(int n)', '{', ' if(n > 1)', ' {', +- \ ' return fact(n-1) * n;', ' }', ' return 1;', '}', '', 'int main(int argc, char **argv)', +- \ '{', ' frobnitz(fact(10));', '}'], +- \ ['#include ', '', 'int fib(int n)', '{', ' if(n > 2)', ' {', +- \ ' return fib(n-1) + fib(n-2);', ' }', ' return 1;', '}', '', '// Frobs foo heartily', +- \ 'int frobnitz(int foo)', '{', ' int i;', ' for(i = 0; i < 10; i++)', ' {', +- \ ' printf("%d\n", foo);', ' }', '}', '', +- \ 'int main(int argc, char **argv)', '{', ' frobnitz(fib(10));', '}']) +- call term_sendkeys(buf, ":diffupdate!\") +- call term_sendkeys(buf, ":set diffopt+=internal\") +- call VerifyScreenDump(buf, 'Test_diff_07', {}) +- +- call term_sendkeys(buf, ":set diffopt+=algorithm:patience\") +- call VerifyScreenDump(buf, 'Test_diff_08', {}) +- +- call term_sendkeys(buf, ":set diffopt+=algorithm:histogram\") +- call VerifyScreenDump(buf, 'Test_diff_09', {}) +- +- " Test 10-11: normal/indent-heuristic +- call term_sendkeys(buf, ":set diffopt&vim\") +- call WriteDiffFiles(buf, ['', ' def finalize(values)', '', ' values.each do |v|', ' v.finalize', ' end'], +- \ ['', ' def finalize(values)', '', ' values.each do |v|', ' v.prepare', ' end', '', +- \ ' values.each do |v|', ' v.finalize', ' end']) +- call term_sendkeys(buf, ":diffupdate!\") +- call term_sendkeys(buf, ":set diffopt+=internal\") +- call VerifyScreenDump(buf, 'Test_diff_10', {}) +- +- " Leave trailing : at commandline! +- call term_sendkeys(buf, ":set diffopt+=indent-heuristic\:\") +- call VerifyScreenDump(buf, 'Test_diff_11', {}, 'one') +- " shouldn't matter, if indent-algorithm comes before or after the algorithm +- call term_sendkeys(buf, ":set diffopt&\") +- call term_sendkeys(buf, ":set diffopt+=indent-heuristic,algorithm:patience\:\") +- call VerifyScreenDump(buf, 'Test_diff_11', {}, 'two') +- call term_sendkeys(buf, ":set diffopt&\") +- call term_sendkeys(buf, ":set diffopt+=algorithm:patience,indent-heuristic\:\") +- call VerifyScreenDump(buf, 'Test_diff_11', {}, 'three') +- +- " Test 12: diff the same file +- call WriteDiffFiles(buf, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) +- call VerifyBoth(buf, 'Test_diff_12', '') +- +- " Test 13: diff an empty file +- call WriteDiffFiles(buf, [], []) +- call VerifyBoth(buf, 'Test_diff_13', '') +- +- " Test 14: test diffopt+=icase +- call WriteDiffFiles(buf, ['a', 'b', 'cd'], ['A', 'b', 'cDe']) +- call VerifyBoth(buf, 'Test_diff_14', " diffopt+=filler diffopt+=icase") +- +- " Test 15-16: test diffopt+=iwhite +- call WriteDiffFiles(buf, ['int main()', '{', ' printf("Hello, World!");', ' return 0;', '}'], +- \ ['int main()', '{', ' if (0)', ' {', ' printf("Hello, World!");', ' return 0;', ' }', '}']) +- call term_sendkeys(buf, ":diffupdate!\") +- call term_sendkeys(buf, ":set diffopt&vim diffopt+=filler diffopt+=iwhite\") +- call VerifyScreenDump(buf, 'Test_diff_15', {}) +- call term_sendkeys(buf, ":set diffopt+=internal\") +- call VerifyScreenDump(buf, 'Test_diff_16', {}) +- +- " Test 17: test diffopt+=iblank +- call WriteDiffFiles(buf, ['a', ' ', 'cd', 'ef', 'xxx'], ['a', 'cd', '', 'ef', 'yyy']) +- call VerifyInternal(buf, 'Test_diff_17', " diffopt+=iblank") +- +- " Test 18: test diffopt+=iblank,iwhite / iwhiteall / iwhiteeol +- call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhite") +- call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteall") +- call VerifyInternal(buf, 'Test_diff_18', " diffopt+=iblank,iwhiteeol") +- +- " Test 19: test diffopt+=iwhiteeol +- call WriteDiffFiles(buf, ['a ', 'x', 'cd', 'ef', 'xx xx', 'foo', 'bar'], ['a', 'x', 'c d', ' ef', 'xx xx', 'foo', '', 'bar']) +- call VerifyInternal(buf, 'Test_diff_19', " diffopt+=iwhiteeol") +- +- " Test 19: test diffopt+=iwhiteall +- call VerifyInternal(buf, 'Test_diff_20', " diffopt+=iwhiteall") +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('Xfile1') +- call delete('Xfile2') +-endfunc +- +-func Test_diff_with_cursorline() +- CheckScreendump +- +- call writefile([ +- \ 'hi CursorLine ctermbg=red ctermfg=white', +- \ 'set cursorline', +- \ 'call setline(1, ["foo","foo","foo","bar"])', +- \ 'vnew', +- \ 'call setline(1, ["bee","foo","foo","baz"])', +- \ 'windo diffthis', +- \ '2wincmd w', +- \ ], 'Xtest_diff_cursorline') +- let buf = RunVimInTerminal('-S Xtest_diff_cursorline', {}) +- +- call VerifyScreenDump(buf, 'Test_diff_with_cursorline_01', {}) +- call term_sendkeys(buf, "j") +- call VerifyScreenDump(buf, 'Test_diff_with_cursorline_02', {}) +- call term_sendkeys(buf, "j") +- call VerifyScreenDump(buf, 'Test_diff_with_cursorline_03', {}) +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('Xtest_diff_cursorline') +-endfunc +- + func Test_diff_with_syntax() + CheckScreendump + +@@ -941,30 +784,6 @@ func Test_diff_with_syntax() + call delete('Xprogram2.c') + endfunc + +-func Test_diff_of_diff() +- CheckScreendump +- CheckFeature rightleft +- +- call writefile([ +- \ 'call setline(1, ["aa","bb","cc","@@ -3,2 +5,7 @@","dd","ee","ff"])', +- \ 'vnew', +- \ 'call setline(1, ["aa","bb","cc"])', +- \ 'windo diffthis', +- \ '1wincmd w', +- \ 'setlocal number', +- \ ], 'Xtest_diff_diff') +- let buf = RunVimInTerminal('-S Xtest_diff_diff', {}) +- +- call VerifyScreenDump(buf, 'Test_diff_of_diff_01', {}) +- +- call term_sendkeys(buf, ":set rightleft\") +- call VerifyScreenDump(buf, 'Test_diff_of_diff_02', {}) +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('Xtest_diff_diff') +-endfunc +- + func CloseoffSetup() + enew + call setline(1, ['one', 'two', 'three']) +diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim +index 31357e7..15cd11a 100644 +--- a/src/testdir/test_filetype.vim ++++ b/src/testdir/test_filetype.vim +@@ -538,15 +538,6 @@ func CheckItems(checks) + endfor + endfunc + +-func Test_filetype_detection() +- filetype on +- call CheckItems(s:filename_checks) +- if has('fname_case') +- call CheckItems(s:filename_case_checks) +- endif +- filetype off +-endfunc +- + " Filetypes detected from the file contents by scripts.vim + let s:script_checks = { + \ 'virata': [['% Virata'], +diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim +index d5ee716..43e6028 100644 +--- a/src/testdir/test_popupwin.vim ++++ b/src/testdir/test_popupwin.vim +@@ -519,122 +519,6 @@ func Test_popup_noscrolloff() + call popup_close(winid) + endfunc + +-func Test_popup_drag() +- CheckScreendump +- +- " create a popup that covers the command line +- let lines =<< trim END +- call setline(1, range(1, 20)) +- split +- vsplit +- $wincmd w +- vsplit +- 1wincmd w +- let winid = popup_create(['1111', '222222', '33333'], #{ +- \ drag: 1, +- \ resize: 1, +- \ border: [], +- \ line: &lines - 4, +- \ }) +- func Dragit() +- call feedkeys("\\\\\", "xt") +- endfunc +- map :call test_setmouse(&lines - 4, &columns / 2) +- map :call test_setmouse(&lines - 8, &columns / 2 - 20) +- func Resize() +- call feedkeys("\\\\\", "xt") +- endfunc +- map :call test_setmouse(6, 21) +- map :call test_setmouse(7, 25) +- END +- call writefile(lines, 'XtestPopupDrag') +- let buf = RunVimInTerminal('-S XtestPopupDrag', #{rows: 10}) +- call VerifyScreenDump(buf, 'Test_popupwin_drag_01', {}) +- +- call term_sendkeys(buf, ":call Dragit()\") +- call VerifyScreenDump(buf, 'Test_popupwin_drag_02', {}) +- +- call term_sendkeys(buf, ":call Resize()\") +- call VerifyScreenDump(buf, 'Test_popupwin_drag_03', {}) +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('XtestPopupDrag') +-endfunc +- +-func Test_popup_close_with_mouse() +- CheckScreendump +- +- let lines =<< trim END +- call setline(1, range(1, 20)) +- " With border, can click on X +- let winid = popup_create('foobar', #{ +- \ close: 'button', +- \ border: [], +- \ line: 1, +- \ col: 1, +- \ }) +- func CloseMsg(id, result) +- echomsg 'Popup closed with ' .. a:result +- endfunc +- let winid = popup_create('notification', #{ +- \ close: 'click', +- \ line: 3, +- \ col: 15, +- \ callback: 'CloseMsg', +- \ }) +- let winid = popup_create('no border here', #{ +- \ close: 'button', +- \ line: 5, +- \ col: 3, +- \ }) +- let winid = popup_create('only padding', #{ +- \ close: 'button', +- \ padding: [], +- \ line: 5, +- \ col: 23, +- \ }) +- func CloseWithX() +- call feedkeys("\\\", "xt") +- endfunc +- map :call test_setmouse(1, len('foobar') + 2) +- func CloseWithClick() +- call feedkeys("\\\", "xt") +- endfunc +- map :call test_setmouse(3, 17) +- func CreateWithMenuFilter() +- let winid = popup_create('barfoo', #{ +- \ close: 'button', +- \ filter: 'popup_filter_menu', +- \ border: [], +- \ line: 1, +- \ col: 40, +- \ }) +- endfunc +- END +- call writefile(lines, 'XtestPopupClose') +- let buf = RunVimInTerminal('-S XtestPopupClose', #{rows: 10}) +- call VerifyScreenDump(buf, 'Test_popupwin_close_01', {}) +- +- call term_sendkeys(buf, ":call CloseWithX()\") +- call VerifyScreenDump(buf, 'Test_popupwin_close_02', {}) +- +- call term_sendkeys(buf, ":call CloseWithClick()\") +- call VerifyScreenDump(buf, 'Test_popupwin_close_03', {}) +- +- call term_sendkeys(buf, ":call CreateWithMenuFilter()\") +- call VerifyScreenDump(buf, 'Test_popupwin_close_04', {}) +- +- " We have to send the actual mouse code, feedkeys() would be caught the +- " filter. +- call term_sendkeys(buf, "\[<0;47;1M") +- call VerifyScreenDump(buf, 'Test_popupwin_close_05', {}) +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('XtestPopupClose') +-endfunction +- + func Test_popup_menu_wrap() + CheckScreendump + +@@ -1335,52 +1219,6 @@ func Test_popup_atcursor_pos() + call delete('XtestPopupAtcursorPos') + endfunc + +-func Test_popup_beval() +- CheckScreendump +- CheckFeature balloon_eval_term +- +- let lines =<< trim END +- call setline(1, range(1, 20)) +- call setline(5, 'here is some text to hover over') +- set balloonevalterm +- set balloonexpr=BalloonExpr() +- set balloondelay=100 +- func BalloonExpr() +- let s:winid = [v:beval_text]->popup_beval({}) +- return '' +- endfunc +- func Hover() +- call test_setmouse(5, 15) +- call feedkeys("\\", "xt") +- sleep 100m +- endfunc +- func MoveOntoPopup() +- call test_setmouse(4, 17) +- call feedkeys("\\\", "xt") +- endfunc +- func MoveAway() +- call test_setmouse(5, 13) +- call feedkeys("\\\", "xt") +- endfunc +- END +- call writefile(lines, 'XtestPopupBeval') +- let buf = RunVimInTerminal('-S XtestPopupBeval', #{rows: 10}) +- call term_wait(buf, 100) +- call term_sendkeys(buf, 'j') +- call term_sendkeys(buf, ":call Hover()\") +- call VerifyScreenDump(buf, 'Test_popupwin_beval_1', {}) +- +- call term_sendkeys(buf, ":call MoveOntoPopup()\") +- call VerifyScreenDump(buf, 'Test_popupwin_beval_2', {}) +- +- call term_sendkeys(buf, ":call MoveAway()\") +- call VerifyScreenDump(buf, 'Test_popupwin_beval_3', {}) +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('XtestPopupBeval') +-endfunc +- + func Test_popup_filter() + new + call setline(1, 'some text') +@@ -1895,129 +1733,6 @@ func Test_notifications() + call delete('XtestNotifications') + endfunc + +-func Test_popup_scrollbar() +- CheckScreendump +- +- let lines =<< trim END +- call setline(1, range(1, 20)) +- hi ScrollThumb ctermbg=blue +- hi ScrollBar ctermbg=red +- let winid = popup_create(['one', 'two', 'three', 'four', 'five', +- \ 'six', 'seven', 'eight', 'nine'], #{ +- \ minwidth: 8, +- \ maxheight: 4, +- \ }) +- func ScrollUp() +- call feedkeys("\\", "xt") +- endfunc +- func ScrollDown() +- call feedkeys("\\", "xt") +- endfunc +- func ClickTop() +- call feedkeys("\\", "xt") +- endfunc +- func ClickBot() +- call popup_setoptions(g:winid, #{border: [], close: 'button'}) +- call feedkeys("\\", "xt") +- endfunc +- func Popup_filter(winid, key) +- if a:key == 'j' +- let line = popup_getoptions(a:winid).firstline +- let nlines = line('$', a:winid) +- let newline = line < nlines ? (line + 1) : nlines +- call popup_setoptions(a:winid, #{firstline: newline}) +- return v:true +- elseif a:key == 'x' +- call popup_close(a:winid) +- return v:true +- endif +- endfunc +- +- func PopupScroll() +- call popup_clear() +- let text =<< trim END +- 1 +- 2 +- 3 +- 4 +- long line long line long line long line long line long line +- long line long line long line long line long line long line +- long line long line long line long line long line long line +- END +- call popup_create(text, #{ +- \ minwidth: 30, +- \ maxwidth: 30, +- \ minheight: 4, +- \ maxheight: 4, +- \ firstline: 1, +- \ lastline: 4, +- \ wrap: v:true, +- \ scrollbar: v:true, +- \ mapping: v:false, +- \ filter: funcref('Popup_filter') +- \ }) +- endfunc +- map :call test_setmouse(5, 36) +- map :call test_setmouse(4, 42) +- map :call test_setmouse(7, 42) +- END +- call writefile(lines, 'XtestPopupScroll') +- let buf = RunVimInTerminal('-S XtestPopupScroll', #{rows: 10}) +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_1', {}) +- +- call term_sendkeys(buf, ":call popup_setoptions(winid, #{firstline: 2})\") +- call term_sendkeys(buf, ":\") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_2', {}) +- +- call term_sendkeys(buf, ":call popup_setoptions(winid, #{firstline: 6})\") +- call term_sendkeys(buf, ":\") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_3', {}) +- +- call term_sendkeys(buf, ":call popup_setoptions(winid, #{firstline: 9})\") +- call term_sendkeys(buf, ":\") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_4', {}) +- +- call term_sendkeys(buf, ":call popup_setoptions(winid, #{scrollbarhighlight: 'ScrollBar', thumbhighlight: 'ScrollThumb', firstline: 5})\") +- " this scrolls two lines (half the window height) +- call term_sendkeys(buf, ":call ScrollUp()\") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_5', {}) +- +- call term_sendkeys(buf, ":call ScrollDown()\") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_6', {}) +- +- call term_sendkeys(buf, ":call ScrollDown()\") +- " wait a bit, otherwise it fails sometimes (double click recognized?) +- sleep 100m +- call term_sendkeys(buf, ":call ScrollDown()\") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_7', {}) +- +- call term_sendkeys(buf, ":call ClickTop()\") +- sleep 100m +- call term_sendkeys(buf, ":call ClickTop()\") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_8', {}) +- +- call term_sendkeys(buf, ":call ClickBot()\") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_9', {}) +- +- " remove the minwidth and maxheight +- call term_sendkeys(buf, ":call popup_setoptions(winid, #{maxheight: 0, minwidth: 0})\") +- call term_sendkeys(buf, ":\") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_10', {}) +- +- " check size with non-wrapping lines +- call term_sendkeys(buf, ":call PopupScroll()\") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_11', {}) +- +- " check size with wrapping lines +- call term_sendkeys(buf, "j") +- call VerifyScreenDump(buf, 'Test_popupwin_scroll_12', {}) +- call term_sendkeys(buf, "x") +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('XtestPopupScroll') +-endfunc +- + func Test_popup_fitting_scrollbar() + " this was causing a crash, divide by zero + let winid = popup_create([ +diff --git a/src/testdir/test_popupwin_textprop.vim b/src/testdir/test_popupwin_textprop.vim +index 1b339d4..a42129d 100644 +--- a/src/testdir/test_popupwin_textprop.vim ++++ b/src/testdir/test_popupwin_textprop.vim +@@ -7,170 +7,4 @@ CheckFeature textprop + source screendump.vim + CheckScreendump + +-func Test_textprop_popup() +- let lines =<< trim END +- call setline(1, range(1, 100)) +- call setline(50, 'some text to work with') +- 50 +- normal zz +- set scrolloff=0 +- call prop_type_add('popupMarker', #{highlight: 'DiffAdd', bufnr: bufnr('%')}) +- call prop_add(50, 11, #{ +- \ length: 7, +- \ type: 'popupMarker', +- \ bufnr: bufnr('%'), +- \ }) +- let winid = popup_create('the text', #{ +- \ pos: 'botleft', +- \ textprop: 'popupMarker', +- \ border: [], +- \ padding: [0,1,0,1], +- \ close: 'click', +- \ }) +- END +- call writefile(lines, 'XtestTextpropPopup') +- let buf = RunVimInTerminal('-S XtestTextpropPopup', #{rows: 10}) +- call VerifyScreenDump(buf, 'Test_popup_textprop_01', {}) +- +- call term_sendkeys(buf, "zt") +- call VerifyScreenDump(buf, 'Test_popup_textprop_02', {}) +- +- call term_sendkeys(buf, "zzIawe\") +- call VerifyScreenDump(buf, 'Test_popup_textprop_03', {}) +- +- call term_sendkeys(buf, "0dw") +- call VerifyScreenDump(buf, 'Test_popup_textprop_04', {}) +- +- call term_sendkeys(buf, "Oinserted\") +- call VerifyScreenDump(buf, 'Test_popup_textprop_05', {}) +- +- call term_sendkeys(buf, "k2dd") +- call VerifyScreenDump(buf, 'Test_popup_textprop_06', {}) +- +- call term_sendkeys(buf, "4\") +- call VerifyScreenDump(buf, 'Test_popup_textprop_07', {}) +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('XtestTextpropPopup') +-endfunc +- +-func Test_textprop_popup_corners() +- let lines =<< trim END +- call setline(1, range(1, 100)) +- call setline(50, 'now working with some longer text here') +- 50 +- normal zz +- set scrolloff=0 +- call prop_type_add('popupMarker', #{highlight: 'DiffAdd'}) +- call prop_add(50, 23, #{ +- \ length: 6, +- \ type: 'popupMarker', +- \ }) +- let winid = popup_create('bottom left', #{ +- \ pos: 'botleft', +- \ textprop: 'popupMarker', +- \ textpropwin: win_getid(), +- \ padding: [0,1,0,1], +- \ }) +- let winid = popup_create('bottom right', #{ +- \ pos: 'botright', +- \ textprop: 'popupMarker', +- \ border: [], +- \ padding: [0,1,0,1], +- \ }) +- let winid = popup_create('top left', #{ +- \ pos: 'topleft', +- \ textprop: 'popupMarker', +- \ border: [], +- \ padding: [0,1,0,1], +- \ }) +- let winid = popup_create('top right', #{ +- \ pos: 'topright', +- \ textprop: 'popupMarker', +- \ padding: [0,1,0,1], +- \ }) +- END +- call writefile(lines, 'XtestTextpropPopupCorners') +- let buf = RunVimInTerminal('-S XtestTextpropPopupCorners', #{rows: 12}) +- call VerifyScreenDump(buf, 'Test_popup_textprop_corn_1', {}) +- +- call term_sendkeys(buf, "0dw") +- call VerifyScreenDump(buf, 'Test_popup_textprop_corn_2', {}) +- +- call term_sendkeys(buf, "46Goextra\") +- call VerifyScreenDump(buf, 'Test_popup_textprop_corn_3', {}) +- +- call term_sendkeys(buf, "u") +- call term_sendkeys(buf, ":\") +- call VerifyScreenDump(buf, 'Test_popup_textprop_corn_4', {}) +- +- call term_sendkeys(buf, ":vsplit foo\") +- call VerifyScreenDump(buf, 'Test_popup_textprop_corn_5', {}) +- +- call term_sendkeys(buf, ":only!\") +- call VerifyScreenDump(buf, 'Test_popup_textprop_corn_6', {}) +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('XtestTextpropPopupCorners') +-endfunc +- +-func Test_textprop_popup_offsets() +- let lines =<< trim END +- call setline(1, range(1, 100)) +- call setline(50, 'now working with some longer text here') +- 50 +- normal zz +- set scrolloff=0 +- call prop_type_add('popupMarker', #{highlight: 'DiffAdd'}) +- call prop_add(50, 23, #{ +- \ length: 6, +- \ type: 'popupMarker', +- \ }) +- let winid = popup_create('bottom left', #{ +- \ pos: 'botleft', +- \ line: -1, +- \ col: 2, +- \ textprop: 'popupMarker', +- \ padding: [0,1,0,1], +- \ }) +- let winid = popup_create('bottom right', #{ +- \ pos: 'botright', +- \ line: -1, +- \ col: -2, +- \ textprop: 'popupMarker', +- \ border: [], +- \ padding: [0,1,0,1], +- \ }) +- let winid = popup_create('top left', #{ +- \ pos: 'topleft', +- \ line: 1, +- \ col: 2, +- \ textprop: 'popupMarker', +- \ border: [], +- \ padding: [0,1,0,1], +- \ }) +- let winid = popup_create('top right', #{ +- \ pos: 'topright', +- \ line: 1, +- \ col: -2, +- \ textprop: 'popupMarker', +- \ padding: [0,1,0,1], +- \ }) +- END +- call writefile(lines, 'XtestTextpropPopupOffset') +- let buf = RunVimInTerminal('-S XtestTextpropPopupOffset', #{rows: 12}) +- call VerifyScreenDump(buf, 'Test_popup_textprop_off_1', {}) +- +- " test that removing the text property closes the popups +- call term_sendkeys(buf, ":call prop_clear(50)\") +- call VerifyScreenDump(buf, 'Test_popup_textprop_off_2', {}) +- +- " clean up +- call StopVimInTerminal(buf) +- call delete('XtestTextpropPopupOffset') +-endfunc +- +- + " vim: shiftwidth=2 sts=2 +-- +2.19.1 + diff --git a/vim.spec b/vim.spec index bfffe2aebf31197c2312270f46699e050cfc21bb..0d10efb324028247b78d46a586c701316bda094a 100644 --- a/vim.spec +++ b/vim.spec @@ -12,7 +12,7 @@ Name: vim Epoch: 2 Version: 8.2 -Release: 23 +Release: 24 Summary: Vim is a highly configurable text editor for efficiently creating and changing any kind of text. License: Vim and MIT URL: http://www.vim.org @@ -43,52 +43,58 @@ Patch6006: backport-CVE-2021-3872.patch Patch6007: backport-CVE-2021-3875.patch Patch6008: backport-CVE-2021-3903.patch Patch6009: backport-CVE-2021-3927.patch -Patch6010: backport-CVE-2021-3928.patch -Patch6011: backport-CVE-2021-3973.patch -Patch6012: backport-CVE-2021-3974.patch -Patch6013: backport-find-test-fails.patch -Patch6014: backport-no-early-check-if-find-and-sfind-have-an-argument.patch -Patch6015: backport-CVE-2021-3984.patch -Patch6016: backport-CVE-2021-4019.patch -Patch6017: backport-Python-3.9-does-not-define-_Py_DEC_REFTOTAL.patch -Patch6018: backport-linker-errors-when-building-with-dynamic-Python-3.9.patch -Patch6019: backport-PyEval_InitThreads-is-deprecated-in-Python-3.9.patch -Patch6020: backport-build-failure-with-Perl5.32.patch -Patch6021: backport-cannot-build-with-Strawberry-Perl-5.32.0.patch -Patch6022: backport-cannot-build-with-Perl-5.34.patch -Patch6023: backport-macros-for-Ruby-are-too-complicated.patch -Patch6024: backport-build-problem-with-Ruby-2.7.patch -Patch6025: backport-Ruby-missing-function-prototype.patch -Patch6026: backport-build-failure-with-some-Ruby-versions.patch -Patch6027: backport-compilation-error-with-Ruby-3.0.patch -Patch6028: backport-build-failure-with-Ruby-3.0-and-32-bits.patch -Patch6029: backport-missing-error-message.patch -Patch6030: backport-fix-giving-the-error-0-more-files-to-edit.patch -Patch6031: backport-add-the-arglist_locked-flag.patch -Patch6032: backport-CVE-2021-4166.patch -Patch6033: backport-fix-arglist-test-fails.patch -Patch6034: backport-CVE-2021-4192.patch -Patch6035: backport-CVE-2021-4193.patch -Patch6036: backport-CVE-2022-0213.patch -Patch6037: backport-CVE-2022-0261.patch -Patch6038: backport-CVE-2022-0318.patch -Patch6039: backport-vim-fix-garbled-characters-display-when-file-name-ma.patch -Patch6040: backport-CVE-2022-0351.patch -Patch6041: backport-CVE-2022-0408.patch -Patch6042: backport-CVE-2022-0361.patch -Patch6043: backport-CVE-2022-0359.patch -Patch6044: backport-CVE-2022-0413.patch -Patch6045: backport-CVE-2022-0368.patch -Patch6046: backport-CVE-2022-0443.patch -Patch6047: backport-CVE-2022-0392.patch -Patch6048: backport-invalid-argument-errmsg.patch -Patch6049: backport-CVE-2022-0417.patch +Patch6010: backport-cannot-use-z-when-spell-is-off.patch +Patch6011: backport-CVE-2021-3928.patch +Patch6012: backport-CVE-2021-3973.patch +Patch6013: backport-CVE-2021-3974.patch +Patch6014: backport-find-test-fails.patch +Patch6015: backport-no-early-check-if-find-and-sfind-have-an-argument.patch +Patch6016: backport-CVE-2021-3984.patch +Patch6017: backport-CVE-2021-4019.patch +Patch6018: backport-Python-3.9-does-not-define-_Py_DEC_REFTOTAL.patch +Patch6019: backport-linker-errors-when-building-with-dynamic-Python-3.9.patch +Patch6020: backport-PyEval_InitThreads-is-deprecated-in-Python-3.9.patch +Patch6021: backport-build-failure-with-Perl5.32.patch +Patch6022: backport-cannot-build-with-Strawberry-Perl-5.32.0.patch +Patch6023: backport-cannot-build-with-Perl-5.34.patch +Patch6024: backport-macros-for-Ruby-are-too-complicated.patch +Patch6025: backport-build-problem-with-Ruby-2.7.patch +Patch6026: backport-Ruby-missing-function-prototype.patch +Patch6027: backport-build-failure-with-some-Ruby-versions.patch +Patch6028: backport-compilation-error-with-Ruby-3.0.patch +Patch6029: backport-build-failure-with-Ruby-3.0-and-32-bits.patch +Patch6030: backport-missing-error-message.patch +Patch6031: backport-fix-giving-the-error-0-more-files-to-edit.patch +Patch6032: backport-add-the-arglist_locked-flag.patch +Patch6033: backport-CVE-2021-4166.patch +Patch6034: backport-fix-arglist-test-fails.patch +Patch6035: backport-CVE-2021-4192.patch +Patch6036: backport-CVE-2021-4193.patch +Patch6037: backport-CVE-2022-0213.patch +Patch6038: backport-CVE-2022-0261.patch +Patch6039: backport-CVE-2022-0318.patch +Patch6040: backport-block-insert-with-double-wide-character-fails.patch +Patch6041: backport-vim-fix-garbled-characters-display-when-file-name-ma.patch +Patch6042: backport-CVE-2022-0351.patch +Patch6043: backport-CVE-2022-0408.patch +Patch6044: backport-CVE-2022-0361.patch +Patch6045: backport-command-line-editing-not-sufficiently-tested.patch +Patch6046: backport-CVE-2022-0359.patch +Patch6047: backport-CVE-2022-0413.patch +Patch6048: backport-CVE-2022-0368.patch +Patch6049: backport-CVE-2022-0443.patch +Patch6050: backport-invalid-argument-errmsg.patch +Patch6051: backport-CVE-2022-0417.patch +Patch6052: backport-invalid-memory-access-with-search-command.patch +Patch6053: backport-bracketed-paste-can-still-cause-invalid-memory-acces.patch +Patch6054: backport-CVE-2022-0392.patch Patch9000: bugfix-rm-modify-info-version.patch +Patch9001: remove-failed-tests-due-to-patch.patch BuildRequires: autoconf python3-devel ncurses-devel gettext perl-devel perl-generators gcc BuildRequires: perl(ExtUtils::Embed) perl(ExtUtils::ParseXS) libacl-devel gpm-devel file -BuildRequires: desktop-file-utils >= 0.2.93 +BuildRequires: desktop-file-utils >= 0.2.93 libtool chrpath %if %{_with_selinux__} BuildRequires: libselinux-devel %endif @@ -366,8 +372,13 @@ echo ".so man1/vimtutor.1" > %{buildroot}%{_mandir}/man1/gvimtutor.1 echo ".so man1/vi.1" > %{buildroot}%{_mandir}/man5/virc.5 touch %{buildroot}%{_datadir}/%{name}/vimfiles/doc/tags +chrpath -d %{buildroot}%{_bindir}/vim +chrpath -d %{buildroot}%{_bindir}/xxd + +mkdir -p %{buildroot}/etc/ld.so.conf.d +echo "{_libdir}/perl5/CORE" > %{buildroot}/etc/ld.so.conf.d/%{name}-%{_arch}.conf + pushd runtime -rm -rf doc ln -sf ../../%{name}/%{vimdir}/doc docs popd @@ -378,6 +389,12 @@ popd > %{_datadir}/%{name}/vimfiles/doc/tags || : %{_bindir}/vim -c ":helptags %{_datadir}/%{name}/vimfiles/doc" -c :q &> /dev/null || : +%check +export TERM=linux +# Reset the terminal scrolling region left behind by the testsuite +trap "printf '\e[r'" EXIT +LC_ALL=en_US.UTF-8 make -j1 test + %files common %exclude %{_datadir}/vim/%{vimdir}/macros/maze/maze*.c %exclude %{_datadir}/vim/%{vimdir}/tools @@ -445,6 +462,7 @@ popd %{_mandir}/man1/{gex.*,gview.*,gvim*,rvim.*,vim.*,vimdiff.*} %{_mandir}/man1/{vimtutor.*,vimx.*,xxd.*} %{_mandir}/man5/vimrc.* +%config(noreplace) /etc/ld.so.conf.d/* %files minimal %config(noreplace) %{_sysconfdir}/virc @@ -454,6 +472,7 @@ popd %files enhanced %{_bindir}/{vim,rvim,vimdiff,vimtutor} +%config(noreplace) /etc/ld.so.conf.d/* %files filesystem %dir %{_datadir}/%{name}/vimfiles/after/* @@ -471,6 +490,12 @@ popd %{_mandir}/man1/evim.* %changelog +* Thu Feb 17 2022 yuanxin - 2:8.2-24 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC:add make check + * Wed Feb 09 2022 tianwei - 2:8.2-23 - Type:CVE - ID:CVE-2022-0443 CVE-2022-0392 CVE-2022-0417