From: Bram Moolenaar Date: Wed, 7 Sep 2022 17:21:24 +0000 (+0100) Subject: patch 9.0.0407: matchstr() does match column offset X-Git-Tag: v9.0.0407 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=75a115e8d632e96b4f45dc5145ba261876a83dcf;p=vim patch 9.0.0407: matchstr() does match column offset Problem: matchstr() does match column offset. (Yasuhiro Matsumoto) Solution: Accept line number zero. (closes #10938) --- diff --git a/src/regexp_bt.c b/src/regexp_bt.c index cf484e0ba..e3e7a1801 100644 --- a/src/regexp_bt.c +++ b/src/regexp_bt.c @@ -3444,7 +3444,7 @@ regmatch( linenr_T lnum = rex.reg_firstlnum + rex.lnum; long_u vcol = 0; - if (lnum > 0 && lnum <= wp->w_buffer->b_ml.ml_line_count) + if (lnum >= 0 && lnum <= wp->w_buffer->b_ml.ml_line_count) vcol = (long_u)win_linetabsize(wp, lnum, rex.line, (colnr_T)(rex.input - rex.line)); if (!re_num_cmp(vcol + 1, scan)) diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index f8717f5b1..b39848927 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -6778,7 +6778,7 @@ nfa_regmatch( linenr_T lnum = rex.reg_firstlnum + rex.lnum; long_u vcol = 0; - if (lnum > 0 + if (lnum >= 0 && lnum <= wp->w_buffer->b_ml.ml_line_count) vcol = (long_u)win_linetabsize(wp, lnum, rex.line, col); diff --git a/src/testdir/test_regexp_latin.vim b/src/testdir/test_regexp_latin.vim index bc08439d1..6f3ffe23f 100644 --- a/src/testdir/test_regexp_latin.vim +++ b/src/testdir/test_regexp_latin.vim @@ -30,11 +30,13 @@ endfunc func Test_equivalence_re1() set re=1 call s:equivalence_test() + set re=0 endfunc func Test_equivalence_re2() set re=2 call s:equivalence_test() + set re=0 endfunc func Test_recursive_substitute() @@ -67,6 +69,7 @@ func Test_eow_with_optional() let actual = matchlist('abc def', '\(abc\>\)\?\s*\(def\)') call assert_equal(expected, actual) endfor + set re=0 endfunc func Test_backref() @@ -1141,4 +1144,14 @@ def Test_compare_columns() prop_type_delete('name') enddef +def Test_compare_column_matchstr() + enew + set re=1 + call assert_equal('aaa', matchstr('aaaaaaaaaaaaaaaaaaaa', '.*\%<5v')) + set re=2 + call assert_equal('aaa', matchstr('aaaaaaaaaaaaaaaaaaaa', '.*\%<5v')) + set re=0 +enddef + + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index e4b0b09a2..92fd7e7c8 100644 --- a/src/version.c +++ b/src/version.c @@ -703,6 +703,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 407, /**/ 406, /**/