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