fix(folds): fix fold marker multibyte comparison (#20439)

This commit is contained in:
zeertzjq 2022-10-02 16:32:33 +08:00 committed by GitHub
parent dd1c613d0b
commit 0643645d5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 3 deletions

View File

@ -3012,7 +3012,7 @@ static void foldlevelMarker(fline_T *flp)
char *s = ml_get_buf(flp->wp->w_buffer, flp->lnum + flp->off, false);
while (*s) {
if (*s == cstart
if ((unsigned char)(*s) == cstart
&& STRNCMP(s + 1, startmarker, foldstartmarkerlen - 1) == 0) {
// found startmarker: set flp->lvl
s += foldstartmarkerlen;
@ -3032,8 +3032,8 @@ static void foldlevelMarker(fline_T *flp)
flp->lvl_next++;
flp->start++;
}
} else if (*s == cend && STRNCMP(s + 1, foldendmarker + 1,
foldendmarkerlen - 1) == 0) {
} else if ((unsigned char)(*s) == cend
&& STRNCMP(s + 1, foldendmarker + 1, foldendmarkerlen - 1) == 0) {
// found endmarker: set flp->lvl_next
s += foldendmarkerlen;
if (ascii_isdigit(*s)) {

View File

@ -4,6 +4,7 @@ local clear, feed, eq = helpers.clear, helpers.feed, helpers.eq
local command = helpers.command
local feed_command = helpers.feed_command
local insert = helpers.insert
local expect = helpers.expect
local funcs = helpers.funcs
local meths = helpers.meths
local source = helpers.source
@ -1911,4 +1912,19 @@ describe("folded lines", function()
command('%delete')
eq(0, funcs.foldlevel(1))
end)
it('multibyte fold markers work #20438', function()
meths.win_set_option(0, 'foldmethod', 'marker')
meths.win_set_option(0, 'foldmarker', '«,»')
insert([[
bbbbb
bbbbb
bbbbb]])
feed('zfgg')
expect([[
bbbbb/*«*/
bbbbb
bbbbb/*»*/]])
eq(1, funcs.foldlevel(1))
end)
end)