diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-05-14 17:39:18 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-05-14 17:39:18 +0100 |
commit | e5d91ba1de83949eb9357c0fb8cbd91e7e69be6f (patch) | |
tree | d734281ee07e459819249aa8d86e1b042d69390d /src | |
parent | e42c27d9e8a18e3786f13f17663914cdd0f63f9e (diff) |
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)
Diffstat (limited to 'src')
-rw-r--r-- | src/search.c | 6 | ||||
-rw-r--r-- | src/testdir/test_charsearch.vim | 2 | ||||
-rw-r--r-- | src/testdir/test_charsearch_utf8.vim | 7 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 14 insertions, 3 deletions
diff --git a/src/search.c b/src/search.c index 793e042341..de17595257 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 142e6c8f2a..9b7c9a0a09 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 82a807ac5b..843edbb514 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 8620f9732b..292f2285f8 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, |