Mercurial > vim
diff src/regexp.c @ 18576:e9675870c480 v8.1.2282
patch 8.1.2282: crash when passing many arguments through a partial
Commit: https://github.com/vim/vim/commit/4c054e9fb23027b55a09ee647a3a2c91936aeb1b
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Nov 10 00:13:50 2019 +0100
patch 8.1.2282: crash when passing many arguments through a partial
Problem: Crash when passing many arguments through a partial. (Andy
Massimino)
Solution: Check the number of arguments. (closes #5186)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 10 Nov 2019 00:15:04 +0100 |
parents | 23fef64352a1 |
children | d34ec6fe207d |
line wrap: on
line diff
--- a/src/regexp.c +++ b/src/regexp.c @@ -2015,12 +2015,18 @@ vim_regsub_both( call_func(s, -1, &rettv, 1, argv, &funcexe); } if (matchList.sl_list.lv_len > 0) - /* fill_submatch_list() was called */ + // fill_submatch_list() was called clear_submatch_list(&matchList); - eval_result = tv_get_string_buf_chk(&rettv, buf); - if (eval_result != NULL) - eval_result = vim_strsave(eval_result); + if (rettv.v_type == VAR_UNKNOWN) + // something failed, no need to report another error + eval_result = NULL; + else + { + eval_result = tv_get_string_buf_chk(&rettv, buf); + if (eval_result != NULL) + eval_result = vim_strsave(eval_result); + } clear_tv(&rettv); } else