summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-05-14 17:39:18 +0100
committerBram Moolenaar <Bram@vim.org>2023-05-14 17:39:18 +0100
commite5d91ba1de83949eb9357c0fb8cbd91e7e69be6f (patch)
treed734281ee07e459819249aa8d86e1b042d69390d
parente42c27d9e8a18e3786f13f17663914cdd0f63f9e (diff)
downloadvim-git-e5d91ba1de83949eb9357c0fb8cbd91e7e69be6f.tar.gz
patch 9.0.1555: setcharsearch() does not clear last searched char properlyv9.0.1555
Problem: setcharsearch() does not clear last searched char properly. Solution: Do not accept lastc_bytelen smaller than one. (closes #12398)
-rw-r--r--src/search.c6
-rw-r--r--src/testdir/test_charsearch.vim2
-rw-r--r--src/testdir/test_charsearch_utf8.vim7
-rw-r--r--src/version.c2
4 files changed, 14 insertions, 3 deletions
diff --git a/src/search.c b/src/search.c
index 793e04234..de1759525 100644
--- a/src/search.c
+++ b/src/search.c
@@ -496,7 +496,7 @@ last_csearch_until(void)
}
void
-set_last_csearch(int c, char_u *s UNUSED, int len UNUSED)
+set_last_csearch(int c, char_u *s, int len)
{
*lastc = c;
lastc_bytelen = len;
@@ -1789,7 +1789,7 @@ searchc(cmdarg_T *cap, int t_cmd)
}
else // repeat previous search
{
- if (*lastc == NUL && lastc_bytelen == 1)
+ if (*lastc == NUL && lastc_bytelen <= 1)
return FAIL;
if (dir) // repeat in opposite direction
dir = -lastcdir;
@@ -1833,7 +1833,7 @@ searchc(cmdarg_T *cap, int t_cmd)
return FAIL;
col -= (*mb_head_off)(p, p + col - 1) + 1;
}
- if (lastc_bytelen == 1)
+ if (lastc_bytelen <= 1)
{
if (p[col] == c && stop)
break;
diff --git a/src/testdir/test_charsearch.vim b/src/testdir/test_charsearch.vim
index 142e6c8f2..9b7c9a0a0 100644
--- a/src/testdir/test_charsearch.vim
+++ b/src/testdir/test_charsearch.vim
@@ -38,6 +38,8 @@ func Test_charsearch()
" clear the character search
call setcharsearch({'char' : ''})
call assert_equal('', getcharsearch().char)
+ call assert_beeps('normal ;')
+ call assert_beeps('normal ,')
call assert_fails("call setcharsearch([])", 'E1206:')
enew!
diff --git a/src/testdir/test_charsearch_utf8.vim b/src/testdir/test_charsearch_utf8.vim
index 82a807ac5..843edbb51 100644
--- a/src/testdir/test_charsearch_utf8.vim
+++ b/src/testdir/test_charsearch_utf8.vim
@@ -13,6 +13,13 @@ func Test_search_cmds()
call assert_equal([0, 1, 43, 0], getpos('.'))
normal! ,
call assert_equal([0, 1, 28, 0], getpos('.'))
+ call assert_equal('最', getcharsearch().char)
+ call setcharsearch({'char' : ''})
+ call assert_equal('', getcharsearch().char)
+ call assert_beeps('normal ;')
+ call assert_equal([0, 1, 28, 0], getpos('.'))
+ call assert_beeps('normal ,')
+ call assert_equal([0, 1, 28, 0], getpos('.'))
bw!
endfunc
diff --git a/src/version.c b/src/version.c
index 8620f9732..292f2285f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1555,
+/**/
1554,
/**/
1553,