mirror of
https://github.com/vim/vim.git
synced 2025-09-07 22:03:36 -04:00
patch 9.1.0692: Wrong patlen value in ex_substitute()
Problem: Wrong patlen value in ex_substitute() (after 9.1.0426). Solution: Compute patlen after finding end separator. (zeertzjq) Add a more explicit test. The test already passes as the only case where a overlarge patlen value matters was fixed by patch 9.1.0689. closes: #15565 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
3f7024cf86
commit
d1c8d2de4b
@ -3841,11 +3841,11 @@ ex_substitute(exarg_T *eap)
|
||||
which_pat = RE_LAST; // use last used regexp
|
||||
delimiter = *cmd++; // remember delimiter character
|
||||
pat = cmd; // remember start of search pat
|
||||
patlen = STRLEN(pat);
|
||||
cmd = skip_regexp_ex(cmd, delimiter, magic_isset(),
|
||||
&eap->arg, NULL, NULL);
|
||||
if (cmd[0] == delimiter) // end delimiter found
|
||||
*cmd++ = NUL; // replace it with a NUL
|
||||
patlen = STRLEN(pat);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1747,6 +1747,37 @@ func Test_search_with_no_last_pat()
|
||||
call delete('Xresult')
|
||||
endfunc
|
||||
|
||||
" Test for using the last substitute pattern without last search pattern.
|
||||
func Test_search_with_last_substitute_pat()
|
||||
let lines =<< trim [SCRIPT]
|
||||
new
|
||||
set shortmess+=S
|
||||
call setline(1, repeat(['foofoo'], 3))
|
||||
%s/foo/bar/
|
||||
call assert_equal(repeat(['barfoo'], 3), getline(1, '$'))
|
||||
|
||||
call cursor(1, 1)
|
||||
call assert_equal("/foo", execute('call feedkeys("/\r", "tx")', '')->trim())
|
||||
call assert_equal([0, 1, 4, 0], getpos('.'))
|
||||
|
||||
if has('rightleft')
|
||||
set rightleft rightleftcmd=search
|
||||
call cursor(1, 1)
|
||||
call assert_equal("oof/", execute('call feedkeys("/\r", "tx")', '')->trim())
|
||||
call assert_equal([0, 1, 4, 0], getpos('.'))
|
||||
endif
|
||||
|
||||
call writefile(v:errors, 'Xresult')
|
||||
qall!
|
||||
[SCRIPT]
|
||||
call writefile(lines, 'Xscript', 'D')
|
||||
|
||||
if RunVim([], [], '--clean -S Xscript')
|
||||
call assert_equal([], readfile('Xresult'))
|
||||
endif
|
||||
call delete('Xresult')
|
||||
endfunc
|
||||
|
||||
" Test for using tilde (~) atom in search. This should use the last used
|
||||
" substitute pattern
|
||||
func Test_search_tilde_pat()
|
||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
692,
|
||||
/**/
|
||||
691,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user