forked from aniani/vim
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:
committed by
Christian Brabandt
parent
3f7024cf86
commit
d1c8d2de4b
@@ -3841,11 +3841,11 @@ ex_substitute(exarg_T *eap)
|
|||||||
which_pat = RE_LAST; // use last used regexp
|
which_pat = RE_LAST; // use last used regexp
|
||||||
delimiter = *cmd++; // remember delimiter character
|
delimiter = *cmd++; // remember delimiter character
|
||||||
pat = cmd; // remember start of search pat
|
pat = cmd; // remember start of search pat
|
||||||
patlen = STRLEN(pat);
|
|
||||||
cmd = skip_regexp_ex(cmd, delimiter, magic_isset(),
|
cmd = skip_regexp_ex(cmd, delimiter, magic_isset(),
|
||||||
&eap->arg, NULL, NULL);
|
&eap->arg, NULL, NULL);
|
||||||
if (cmd[0] == delimiter) // end delimiter found
|
if (cmd[0] == delimiter) // end delimiter found
|
||||||
*cmd++ = NUL; // replace it with a NUL
|
*cmd++ = NUL; // replace it with a NUL
|
||||||
|
patlen = STRLEN(pat);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1747,6 +1747,37 @@ func Test_search_with_no_last_pat()
|
|||||||
call delete('Xresult')
|
call delete('Xresult')
|
||||||
endfunc
|
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
|
" Test for using tilde (~) atom in search. This should use the last used
|
||||||
" substitute pattern
|
" substitute pattern
|
||||||
func Test_search_tilde_pat()
|
func Test_search_tilde_pat()
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
692,
|
||||||
/**/
|
/**/
|
||||||
691,
|
691,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user