vim-patch:9.0.1555: setcharsearch() does not clear last searched char properly (#23631)

Problem:    setcharsearch() does not clear last searched char properly.
Solution:   Do not accept lastc_bytelen smaller than one. (closes vim/vim#12398)

e5d91ba1de
This commit is contained in:
zeertzjq 2023-05-15 08:04:23 +08:00 committed by GitHub
parent e71c7898ca
commit 4a0005aee9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 2 deletions

View File

@ -1519,7 +1519,7 @@ int 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
@ -1562,7 +1562,7 @@ int searchc(cmdarg_T *cap, int t_cmd)
}
col -= utf_head_off(p, p + col - 1) + 1;
}
if (lastc_bytelen == 1) {
if (lastc_bytelen <= 1) {
if (p[col] == c && stop) {
break;
}

View File

@ -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!

View File

@ -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