patch 9.2.1046: regex: case-insensitive match fails on multi-byte string with re=1
Commit:
https://github.com/vim/vim/commit/4e5ac0d68a3e35602b63fba7b334baa9dc7cc22e
Author: Volodymyr Chernetskyi <
19735328+c...@users.noreply.github.com>
Date: Mon Sep 7 21:41:41 2026 +0000
patch 9.2.1046: regex: case-insensitive match fails on multi-byte string with re=1
Problem: With 'regexpengine' set to 1 a case-insensitive match against
a literal string fails when the string starts with a
multi-byte character that is longer than a character following
it, so the two regexp engines disagree (after v9.1.0645).
Solution: In cstrncmp() advance by the length of the character at the
current position instead of always measuring the first
character of "s1" (Volodymyr Chernetskyi).
cstrncmp() walks "s1" to find how many characters make up "*n" bytes, so
that it can measure out the same number of characters in "s2". The loop
decremented the remaining byte count by mb_ptr2len(s1), which always
returns the length of the *first* character, rather than the length of
the character at the current position "p".
When the first character is longer than a later one the byte count runs
out too early, the character count comes up short, and MB_STRNICMP2() is
handed a length for "s2" that is too small, so the comparison fails. For
example matching "