diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-01-27 13:55:35 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-01-27 13:55:35 +0000 |
commit | 745b938a48104778dcb7b0245e6589b54cb93593 (patch) | |
tree | de334bcfde5b7c3e4a7326db7528ea6cdabee3e6 /src/time.c | |
parent | b0ad2d92fd19e673ddbbc66742bae3f71778efde (diff) |
patch 8.2.4229: possible crash when invoking timer callback failsv8.2.4229
Problem: Possible crash when invoking timer callback fails.
Solution: Initialize the typval. Give an error for an empty callback.
(closes #9636)
Diffstat (limited to 'src/time.c')
-rw-r--r-- | src/time.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/time.c b/src/time.c index 78e20eb13c..00275ef665 100644 --- a/src/time.c +++ b/src/time.c @@ -481,6 +481,7 @@ timer_callback(timer_T *timer) argv[0].vval.v_number = (varnumber_T)timer->tr_id; argv[1].v_type = VAR_UNKNOWN; + rettv.v_type = VAR_UNKNOWN; call_callback(&timer->tr_callback, -1, &rettv, 1, argv); clear_tv(&rettv); } @@ -854,6 +855,13 @@ f_timer_start(typval_T *argvars, typval_T *rettv) callback = get_callback(&argvars[1]); if (callback.cb_name == NULL) return; + if (in_vim9script() && *callback.cb_name == NUL) + { + // empty callback is not useful for a timer + emsg(_(e_invalid_callback_argument)); + free_callback(&callback); + return; + } timer = create_timer(msec, repeat); if (timer == NULL) |