[vim/vim] regex: case-insensitive match fails on multi-byte string with re=1 (PR #21212)

8 views
Skip to first unread message

Volodymyr Chernetskyi

unread,
Sep 3, 2026, 7:30:39 AM (6 days ago) Sep 3
to vim/vim, Subscribed

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".

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 "\cüber" against "Überraschung": "über" is five bytes, but each iteration subtracts two (the length of "ü"), so the loop runs three times instead of four.

:set regexpengine=1
echo matchstr('Überraschung', '\cüber')

returns an empty string, while 'regexpengine' set to 2 correctly returns "Über". The default value of 0 uses the NFA engine and is unaffected.


You can view, comment on, or merge this pull request online at:

  https://github.com/vim/vim/pull/21212

Commit Summary

  • 34b9a81 regex: case-insensitive match fails on multi-byte string with re=1

File Changes

(2 files)

Patch Links:


Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications, keep track of coding agent tasks and review pull requests on the go with GitHub Mobile for iOS and Android. Download it today!
You are receiving this because you are subscribed to this thread.Message ID: <vim/vim/pull/21212@github.com>

Christian Brabandt

unread,
Sep 7, 2026, 5:44:09 PM (2 days ago) Sep 7
to vim/vim, Subscribed
chrisbra left a comment (vim/vim#21212)

thanks, obviously correct.


Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications, keep track of coding agent tasks and review pull requests on the go with GitHub Mobile for iOS and Android. Download it today!

You are receiving this because you are subscribed to this thread.Message ID: <vim/vim/pull/21212/c5575897413@github.com>

Reply all
Reply to author
Forward
0 new messages