]> granicus.if.org Git - vim/commitdiff
patch 8.2.0361: internal error when using "0" for a callback v8.2.0361
authorBram Moolenaar <Bram@vim.org>
Sat, 7 Mar 2020 15:59:25 +0000 (16:59 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 7 Mar 2020 15:59:25 +0000 (16:59 +0100)
Problem:    Internal error when using "0" for a callback.
Solution:   Give a normal error. (closes #5743)

src/evalvars.c
src/testdir/test_timers.vim
src/version.c

index 227253e1f9177fccd31e1820d607422327cd22ad..40a22f69075747e08cd91239c50057d438b24df9 100644 (file)
@@ -3643,7 +3643,8 @@ f_setbufvar(typval_T *argvars, typval_T *rettv UNUSED)
     callback_T
 get_callback(typval_T *arg)
 {
-    callback_T res;
+    callback_T  res;
+    int                r = OK;
 
     res.cb_free_name = FALSE;
     if (arg->v_type == VAR_PARTIAL && arg->vval.v_partial != NULL)
@@ -3655,17 +3656,21 @@ get_callback(typval_T *arg)
     else
     {
        res.cb_partial = NULL;
-       if (arg->v_type == VAR_FUNC || arg->v_type == VAR_STRING)
+       if (arg->v_type == VAR_STRING && arg->vval.v_string != NULL
+                                              && isdigit(*arg->vval.v_string))
+           r = FAIL;
+       else if (arg->v_type == VAR_FUNC || arg->v_type == VAR_STRING)
        {
            // Note that we don't make a copy of the string.
            res.cb_name = arg->vval.v_string;
            func_ref(res.cb_name);
        }
        else if (arg->v_type == VAR_NUMBER && arg->vval.v_number == 0)
-       {
            res.cb_name = (char_u *)"";
-       }
        else
+           r = FAIL;
+
+       if (r == FAIL)
        {
            emsg(_("E921: Invalid callback argument"));
            res.cb_name = NULL;
index 37af18c3822872559b62509777632c7e6d6e860f..1a6391b9d924bbd857a38b5f106475ca319764e7 100644 (file)
@@ -422,4 +422,8 @@ func Test_timer_garbage_collect()
   call timer_stop(timer)
 endfunc
 
+func Test_timer_invalid_callback()
+  call assert_fails('call timer_start(0, "0")', 'E921')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 608532006d5fe7d59508751cc66d5731325859fc..2c4cd0db3974f3311cc8a08e3f05c5b784e2b7d3 100644 (file)
@@ -738,6 +738,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    361,
 /**/
     360,
 /**/