]> granicus.if.org Git - vim/commitdiff
patch 8.1.0935: old regexp engine may use invalid buffer v8.1.0935
authorBram Moolenaar <Bram@vim.org>
Sat, 16 Feb 2019 17:07:57 +0000 (18:07 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 16 Feb 2019 17:07:57 +0000 (18:07 +0100)
Problem:    Old regexp engine may use invalid buffer for 'iskeyword' or
            uninitialized buffer pointer. (Kuang-che Wu)
Solution:   Set rex.reg_buf when compiling the pattern. (closes #3972)

src/regexp.c
src/testdir/test_regexp_latin.vim
src/version.c

index 30a604b23679b36e9d518ee1b9ec0ff2d5e2df73..83620489516aa056fe389d928a827c7ae511ae4a 100644 (file)
@@ -7998,6 +7998,8 @@ vim_regcomp(char_u *expr_arg, int re_flags)
     bt_regengine.expr = expr;
     nfa_regengine.expr = expr;
 #endif
+    // reg_iswordc() uses rex.reg_buf
+    rex.reg_buf = curbuf;
 
     /*
      * First try the NFA engine, unless backtracking was requested.
index 09104a1423d17d5d540e2e33f8e074860e6a7656..d63b4f9580603d10819a7de374f32b9844b6f785 100644 (file)
@@ -104,3 +104,19 @@ func Test_get_equi_class()
   s/^/[[=
   call assert_equal(1, search(getline(1)))
 endfunc
+
+func Test_rex_init()
+  set noincsearch
+  set re=1
+  new
+  setlocal iskeyword=a-z
+  call setline(1, ['abc', 'ABC'])
+  call assert_equal(1, search('[[:keyword:]]'))
+  new
+  setlocal iskeyword=A-Z
+  call setline(1, ['abc', 'ABC'])
+  call assert_equal(2, search('[[:keyword:]]'))
+  bwipe!
+  bwipe!
+  set re=0
+endfunc
index dbf40834195220ae1b39029eab500d2f37ab9bd4..8dd86f0b00df8cda10082b17c2bca67235bebfaa 100644 (file)
@@ -779,6 +779,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    935,
 /**/
     934,
 /**/