]> granicus.if.org Git - vim/commitdiff
patch 8.2.1560: using NULL pointers in some code v8.2.1560
authorBram Moolenaar <Bram@vim.org>
Tue, 1 Sep 2020 17:56:15 +0000 (19:56 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 1 Sep 2020 17:56:15 +0000 (19:56 +0200)
Problem:    Using NULL pointers in some code. (James McCoy)
Solution:   Avoid adding to a NULL pointer.  Use byte as unsigned.

src/eval.c
src/fold.c
src/spellfile.c
src/spellsuggest.c
src/version.c
src/vim9compile.c

index be3f4622cba4084c24619792518e61538ee1e10b..3eb4be46f0d7d193d7fbc9e3e2a6a47e7eb4867d 100644 (file)
@@ -395,7 +395,7 @@ skip_expr_concatenate(
     typval_T   rettv;
     int                res;
     int                vim9script = in_vim9script();
-    garray_T    *gap = &evalarg->eval_ga;
+    garray_T    *gap = evalarg == NULL ? NULL : &evalarg->eval_ga;
     int                save_flags = evalarg == NULL ? 0 : evalarg->eval_flags;
     int                evaluate = evalarg == NULL
                               ? FALSE : (evalarg->eval_flags & EVAL_EVALUATE);
index 3c106d25cfb342e0e30366248e9b4a647d486332..d95b46b5b4e4764e6498cf6f283e207d549158ac 100644 (file)
@@ -1314,7 +1314,7 @@ setManualFoldWin(
        if (!foldFind(gap, lnum, &fp))
        {
            // If there is a following fold, continue there next time.
-           if (fp < (fold_T *)gap->ga_data + gap->ga_len)
+           if (fp != NULL && fp < (fold_T *)gap->ga_data + gap->ga_len)
                next = fp->fd_top + off;
            break;
        }
@@ -2905,18 +2905,20 @@ foldSplit(
     // any between top and bot, they have been removed by the caller.
     gap1 = &fp->fd_nested;
     gap2 = &fp[1].fd_nested;
-    (void)(foldFind(gap1, bot + 1 - fp->fd_top, &fp2));
-    len = (int)((fold_T *)gap1->ga_data + gap1->ga_len - fp2);
-    if (len > 0 && ga_grow(gap2, len) == OK)
+    if (foldFind(gap1, bot + 1 - fp->fd_top, &fp2))
     {
-       for (idx = 0; idx < len; ++idx)
+       len = (int)((fold_T *)gap1->ga_data + gap1->ga_len - fp2);
+       if (len > 0 && ga_grow(gap2, len) == OK)
        {
-           ((fold_T *)gap2->ga_data)[idx] = fp2[idx];
-           ((fold_T *)gap2->ga_data)[idx].fd_top
-                                                -= fp[1].fd_top - fp->fd_top;
+           for (idx = 0; idx < len; ++idx)
+           {
+               ((fold_T *)gap2->ga_data)[idx] = fp2[idx];
+               ((fold_T *)gap2->ga_data)[idx].fd_top
+                                                 -= fp[1].fd_top - fp->fd_top;
+           }
+           gap2->ga_len = len;
+           gap1->ga_len -= len;
        }
-       gap2->ga_len = len;
-       gap1->ga_len -= len;
     }
     fp->fd_len = top - fp->fd_top;
     fold_changed = TRUE;
index 6aeac86b858477ffbadd414ea288bd09949be437..d5ec3feaddc2ed7390f62dd2f82e9fd316313263 100644 (file)
@@ -816,7 +816,7 @@ read_cnt_string(FILE *fd, int cnt_bytes, int *cntp)
 
     // read the length bytes, MSB first
     for (i = 0; i < cnt_bytes; ++i)
-       cnt = (cnt << 8) + getc(fd);
+       cnt = (cnt << 8) + (unsigned)getc(fd);
     if (cnt < 0)
     {
        *cntp = SP_TRUNCERROR;
index 0821dc62cb56aff98313a282affb7f97dc007353..96e7bb634cfc223cfa31b96a122612da4f4a4883 100644 (file)
@@ -3606,6 +3606,8 @@ check_suggestions(
     int                len;
     hlf_T      attr;
 
+    if (gap->ga_len == 0)
+       return;
     stp = &SUG(*gap, 0);
     for (i = gap->ga_len - 1; i >= 0; --i)
     {
index 158f2a3472b092d1300856bbbd2c87c7c6d6d7a3..29f4363415f3a120d110f3e1781326bca9b2ae01 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1560,
 /**/
     1559,
 /**/
index 0c9f56f5a01cd33f546855f5db9b3682128017fb..5893e5ac0bb56fca66bb9016842e00394232baf9 100644 (file)
@@ -1147,7 +1147,10 @@ generate_NEWLIST(cctx_T *cctx, int count)
     isn->isn_arg.number = count;
 
     // get the member type from all the items on the stack.
-    member = get_member_type_from_stack(
+    if (count == 0)
+       member = &t_void;
+    else
+       member = get_member_type_from_stack(
            ((type_T **)stack->ga_data) + stack->ga_len, count, 1,
                                                          cctx->ctx_type_list);
     type = get_list_type(member, cctx->ctx_type_list);
@@ -1180,7 +1183,10 @@ generate_NEWDICT(cctx_T *cctx, int count)
        return FAIL;
     isn->isn_arg.number = count;
 
-    member = get_member_type_from_stack(
+    if (count == 0)
+       member = &t_void;
+    else
+       member = get_member_type_from_stack(
            ((type_T **)stack->ga_data) + stack->ga_len, count, 2,
                                                          cctx->ctx_type_list);
     type = get_dict_type(member, cctx->ctx_type_list);