diff --git a/src/regexp.c b/src/regexp.c index fe837721eb..d66cd2062f 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -4692,31 +4692,37 @@ regmatch(scan) /* match empty string always works; happens when "~" is * empty. */ } - else if (opnd[1] == NUL + else + { + if (opnd[1] == NUL #ifdef FEAT_MBYTE && !(enc_utf8 && ireg_ic) #endif ) - ++reginput; /* matched a single char */ - else - { - len = (int)STRLEN(opnd); - /* Need to match first byte again for multi-byte. */ - if (cstrncmp(opnd, reginput, &len) != 0) - status = RA_NOMATCH; + { + len = 1; /* matched a single byte above */ + } + else + { + /* Need to match first byte again for multi-byte. */ + len = (int)STRLEN(opnd); + if (cstrncmp(opnd, reginput, &len) != 0) + status = RA_NOMATCH; + } #ifdef FEAT_MBYTE /* Check for following composing character. */ - else if (enc_utf8 - && UTF_COMPOSINGLIKE(reginput, reginput + len)) + if (status != RA_NOMATCH + && enc_utf8 + && UTF_COMPOSINGLIKE(reginput, reginput + len) + && !ireg_icombine) { /* raaron: This code makes a composing character get * ignored, which is the correct behavior (sometimes) * for voweled Hebrew texts. */ - if (!ireg_icombine) - status = RA_NOMATCH; + status = RA_NOMATCH; } #endif - else + if (status != RA_NOMATCH) reginput += len; } } diff --git a/src/testdir/test95.in b/src/testdir/test95.in index 90fa69945a..817e1f12e1 100644 --- a/src/testdir/test95.in +++ b/src/testdir/test95.in @@ -50,6 +50,8 @@ STARTTEST :call add(tl, [2, ".\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"]) :call add(tl, [1, "\u05b9\u05bb", " y\u05b9 x\u05b9\u05bb ", "x\u05b9\u05bb"]) :call add(tl, [2, ".\u05b9\u05bb", " y\u05bb x\u05b9\u05bb ", "x\u05b9\u05bb"]) +:call add(tl, [2, "a", "ca\u0300t"]) +:call add(tl, [2, "a\u0300", "ca\u0300t", "a\u0300"]) :"""" Test \Z diff --git a/src/testdir/test95.ok b/src/testdir/test95.ok index c378221a70..e2baee8d29 100644 --- a/src/testdir/test95.ok +++ b/src/testdir/test95.ok @@ -67,6 +67,12 @@ OK 2 - ֹֻ OK 0 - .ֹֻ OK 1 - .ֹֻ OK 2 - .ֹֻ +OK 0 - a +OK 1 - a +OK 2 - a +OK 0 - à +OK 1 - à +OK 2 - à OK 0 - ú\Z OK 1 - ú\Z OK 2 - ú\Z diff --git a/src/version.c b/src/version.c index 030e6f21a2..5efd62d2a2 100644 --- a/src/version.c +++ b/src/version.c @@ -734,6 +734,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 292, /**/ 291, /**/