aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/range.lua
diff options
context:
space:
mode:
authorVolodymyr Chernetskyi <volodymyr_chernetskyi@goodyear.com>2026-09-08 15:50:03 +0200
committerGitHub <noreply@github.com>2026-09-08 13:50:03 +0000
commitbea6410138c538908bb15639675e9835c66e70bc (patch)
treeb8c8755199565031699800e5301d06190c2696a4 /runtime/lua/vim/range.lua
parentb3bd442c5c3cb5f4392c7a15bff12cd412c23872 (diff)
downloadrneovim-bea6410138c538908bb15639675e9835c66e70bc.tar.gz
rneovim-bea6410138c538908bb15639675e9835c66e70bc.tar.bz2
rneovim-bea6410138c538908bb15639675e9835c66e70bc.zip
vim-patch:9.2.1046: regex: case-insensitive match fails on multi-byte string with re=1 (#41781)
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 "\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. related: vim/vim#14756 closes: vim/vim#21212 https://github.com/vim/vim/commit/4e5ac0d68a3e35602b63fba7b334baa9dc7cc22e
Diffstat (limited to 'runtime/lua/vim/range.lua')
0 files changed, 0 insertions, 0 deletions