]> granicus.if.org Git - vim/commitdiff
patch 7.4.2141 v7.4.2141
authorBram Moolenaar <Bram@vim.org>
Mon, 1 Aug 2016 15:10:20 +0000 (17:10 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 1 Aug 2016 15:10:20 +0000 (17:10 +0200)
Problem:    Coverity reports bogus NULL check.
Solution:   When checking for a variable in the funccal scope don't pass the
            varname.

src/eval.c
src/proto/userfunc.pro
src/userfunc.c
src/version.c

index 495bbb0697698753332d1206b81ae2623d0388ba..1adbabc082ec8f7b037bfd362a552b0ede5d4773 100644 (file)
@@ -2838,7 +2838,7 @@ do_unlet(char_u *name, int forceit)
        }
        hi = hash_find(ht, varname);
        if (HASHITEM_EMPTY(hi))
-           hi = find_hi_in_scoped_ht(name, &varname, &ht);
+           hi = find_hi_in_scoped_ht(name, &ht);
        if (hi != NULL && !HASHITEM_EMPTY(hi))
        {
            di = HI2DI(hi);
@@ -7344,8 +7344,7 @@ find_var(char_u *name, hashtab_T **htp, int no_autoload)
        return ret;
 
     /* Search in parent scope for lambda */
-    return find_var_in_scoped_ht(name, varname ? &varname : NULL,
-               no_autoload || htp != NULL);
+    return find_var_in_scoped_ht(name, no_autoload || htp != NULL);
 }
 
 /*
@@ -7684,7 +7683,7 @@ set_var(
 
     /* Search in parent scope which is possible to reference from lambda */
     if (v == NULL)
-       v = find_var_in_scoped_ht(name, varname ? &varname : NULL, TRUE);
+       v = find_var_in_scoped_ht(name, TRUE);
 
     if ((tv->v_type == VAR_FUNC || tv->v_type == VAR_PARTIAL)
                                      && var_check_func_name(name, v == NULL))
index 3988683cc5878780ea874582af62ae311d520992..25620f16d30a3931464ab9c8ace71fbb102c74bf 100644 (file)
@@ -50,8 +50,8 @@ void *clear_current_funccal(void);
 void restore_current_funccal(void *f);
 void list_func_vars(int *first);
 dict_T *get_current_funccal_dict(hashtab_T *ht);
-hashitem_T *find_hi_in_scoped_ht(char_u *name, char_u **varname, hashtab_T **pht);
-dictitem_T *find_var_in_scoped_ht(char_u *name, char_u **varname, int no_autoload);
+hashitem_T *find_hi_in_scoped_ht(char_u *name, hashtab_T **pht);
+dictitem_T *find_var_in_scoped_ht(char_u *name, int no_autoload);
 int set_ref_in_previous_funccal(int copyID);
 int set_ref_in_call_stack(int copyID);
 int set_ref_in_func_args(int copyID);
index b7420466794f799bf209e3190acda0a656aeb6d1..65cc5909f5134496d9150f53ad07c48249a13577 100644 (file)
@@ -3571,11 +3571,12 @@ get_current_funccal_dict(hashtab_T *ht)
  * Search hashitem in parent scope.
  */
     hashitem_T *
-find_hi_in_scoped_ht(char_u *name, char_u **varname, hashtab_T **pht)
+find_hi_in_scoped_ht(char_u *name, hashtab_T **pht)
 {
     funccall_T *old_current_funccal = current_funccal;
     hashtab_T  *ht;
     hashitem_T *hi = NULL;
+    char_u     *varname;
 
     if (current_funccal == NULL || current_funccal->func->uf_scoped == NULL)
       return NULL;
@@ -3584,10 +3585,10 @@ find_hi_in_scoped_ht(char_u *name, char_u **varname, hashtab_T **pht)
     current_funccal = current_funccal->func->uf_scoped;
     while (current_funccal != NULL)
     {
-       ht = find_var_ht(name, varname);
-       if (ht != NULL && **varname != NUL)
+       ht = find_var_ht(name, &varname);
+       if (ht != NULL && *varname != NUL)
        {
-           hi = hash_find(ht, *varname);
+           hi = hash_find(ht, varname);
            if (!HASHITEM_EMPTY(hi))
            {
                *pht = ht;
@@ -3607,11 +3608,12 @@ find_hi_in_scoped_ht(char_u *name, char_u **varname, hashtab_T **pht)
  * Search variable in parent scope.
  */
     dictitem_T *
-find_var_in_scoped_ht(char_u *name, char_u **varname, int no_autoload)
+find_var_in_scoped_ht(char_u *name, int no_autoload)
 {
     dictitem_T *v = NULL;
     funccall_T *old_current_funccal = current_funccal;
     hashtab_T  *ht;
+    char_u     *varname;
 
     if (current_funccal == NULL || current_funccal->func->uf_scoped == NULL)
        return NULL;
@@ -3620,11 +3622,10 @@ find_var_in_scoped_ht(char_u *name, char_u **varname, int no_autoload)
     current_funccal = current_funccal->func->uf_scoped;
     while (current_funccal)
     {
-       ht = find_var_ht(name, varname ? &(*varname) : NULL);
-       if (ht != NULL)
+       ht = find_var_ht(name, &varname);
+       if (ht != NULL && *varname != NUL)
        {
-           v = find_var_in_ht(ht, *name,
-                   varname ? *varname : NULL, no_autoload);
+           v = find_var_in_ht(ht, *name, varname, no_autoload);
            if (v != NULL)
                break;
        }
index 2778712eb35b3b1531b0ae27b64a50cc5aecf162..ff088fec9c2df80b36d2d7a7fe8064c12fcb3089 100644 (file)
@@ -763,6 +763,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2141,
 /**/
     2140,
 /**/