diff options
Diffstat (limited to 'data/vim/patches/8.1.0910')
-rw-r--r-- | data/vim/patches/8.1.0910 | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0910 b/data/vim/patches/8.1.0910 new file mode 100644 index 000000000..3cbdcddeb --- /dev/null +++ b/data/vim/patches/8.1.0910 @@ -0,0 +1,140 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0910 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0910 +Problem: Crash with tricky search pattern. (Kuang-che Wu) +Solution: Check for runnning out of memory. (closes #3950) +Files: src/regexp_nfa.c, src/testdir/test_regexp_latin.vim + + +*** ../vim-8.1.0909/src/regexp_nfa.c 2019-02-13 18:35:01.398292976 +0100 +--- src/regexp_nfa.c 2019-02-13 20:25:35.216595581 +0100 +*************** +*** 4449,4455 **** + * be (a lot) bigger than anticipated. */ + if (l->n == l->len) + { +! int newlen = l->len * 3 / 2 + 50; + + if (subs != &temp_subs) + { +--- 4449,4456 ---- + * be (a lot) bigger than anticipated. */ + if (l->n == l->len) + { +! int newlen = l->len * 3 / 2 + 50; +! nfa_thread_T *newt; + + if (subs != &temp_subs) + { +*************** +*** 4463,4470 **** + subs = &temp_subs; + } + +! /* TODO: check for vim_realloc() returning NULL. */ +! l->t = vim_realloc(l->t, newlen * sizeof(nfa_thread_T)); + l->len = newlen; + } + +--- 4464,4477 ---- + subs = &temp_subs; + } + +! newt = vim_realloc(l->t, newlen * sizeof(nfa_thread_T)); +! if (newt == NULL) +! { +! // out of memory +! --depth; +! return NULL; +! } +! l->t = newt; + l->len = newlen; + } + +*************** +*** 4756,4762 **** + * addstate(). */ + r = addstate(l, state, subs, pim, -listidx - ADDSTATE_HERE_OFFSET); + if (r == NULL) +! return r; + + // when "*ip" was at the end of the list, nothing to do + if (listidx + 1 == tlen) +--- 4763,4769 ---- + * addstate(). */ + r = addstate(l, state, subs, pim, -listidx - ADDSTATE_HERE_OFFSET); + if (r == NULL) +! return NULL; + + // when "*ip" was at the end of the list, nothing to do + if (listidx + 1 == tlen) +*************** +*** 4777,4788 **** + { + /* not enough space to move the new states, reallocate the list + * and move the states to the right position */ +! nfa_thread_T *newl; + +! l->len = l->len * 3 / 2 + 50; +! newl = (nfa_thread_T *)alloc(l->len * sizeof(nfa_thread_T)); + if (newl == NULL) +! return r; + mch_memmove(&(newl[0]), + &(l->t[0]), + sizeof(nfa_thread_T) * listidx); +--- 4784,4796 ---- + { + /* not enough space to move the new states, reallocate the list + * and move the states to the right position */ +! int newlen = l->len * 3 / 2 + 50; +! nfa_thread_T *newl; + +! newl = (nfa_thread_T *)alloc(newlen * sizeof(nfa_thread_T)); + if (newl == NULL) +! return NULL; +! l->len = newlen; + mch_memmove(&(newl[0]), + &(l->t[0]), + sizeof(nfa_thread_T) * listidx); +*** ../vim-8.1.0909/src/testdir/test_regexp_latin.vim 2019-02-12 23:05:41.743869435 +0100 +--- src/testdir/test_regexp_latin.vim 2019-02-13 20:29:42.795583999 +0100 +*************** +*** 90,92 **** +--- 90,99 ---- + let lnum = search('\v((){328}){389}') + call assert_equal(0, lnum) + endfunc ++ ++ func Test_out_of_memory() ++ new ++ s/^/,n ++ " This will be slow... ++ call assert_fails('call search("\\v((n||<)+);")', 'E363:') ++ endfunc +*** ../vim-8.1.0909/src/version.c 2019-02-13 19:23:04.734816702 +0100 +--- src/version.c 2019-02-13 20:30:21.391411496 +0100 +*************** +*** 785,786 **** +--- 785,788 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 910, + /**/ + +-- +SOLDIER: Where did you get the coconuts? +ARTHUR: Through ... We found them. +SOLDIER: Found them? In Mercea. The coconut's tropical! + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |