Problem: Return value of list_append_list() not always checked.
Solution: Check return value and handle failure.
l = list_alloc();
if (l == NULL)
return;
-
if (list_append_list(rettv->vval.v_list, l) == FAIL)
+ {
+ vim_free(l);
return;
+ }
+
/*
* The current window change list index tracks only the position for the
* current buffer. For other buffers use the stored index for the current
l = list_alloc();
if (l == NULL)
return;
-
if (list_append_list(rettv->vval.v_list, l) == FAIL)
+ {
+ vim_free(l);
return;
+ }
+
list_append_number(rettv->vval.v_list, (varnumber_T)wp->w_jumplistidx);
for (i = 0; i < wp->w_jumplistlen; ++i)
}
/*
- * Get the layout of the given tab page for winlayout().
+ * Get the layout of the given tab page for winlayout() and add it to "l".
*/
static void
get_framelayout(frame_T *fr, list_T *l, int outer)
fr_list = list_alloc();
if (fr_list == NULL)
return;
- list_append_list(l, fr_list);
+ if (list_append_list(l, fr_list) == FAIL)
+ {
+ vim_free(fr_list);
+ return;
+ }
}
if (fr->fr_layout == FR_LEAF)
win_list = list_alloc();
if (win_list == NULL)
return;
- list_append_list(fr_list, win_list);
+ if (list_append_list(fr_list, win_list) == FAIL)
+ {
+ vim_free(win_list);
+ return;
+ }
+
child = fr->fr_child;
while (child != NULL)
{
if (l2 == NULL)
break;
- if (list_append_list(rettv->vval.v_list, l2) == FAIL
- || list_append_number(l2, idx) == FAIL
+ if (list_append_list(rettv->vval.v_list, l2) == FAIL)
+ {
+ vim_free(l2);
+ break;
+ }
+ if (list_append_number(l2, idx) == FAIL
|| list_append_tv(l2, &li->li_tv) == FAIL)
break;
}
l2 = list_alloc();
if (l2 == NULL)
break;
- if (list_append_list(rettv->vval.v_list, l2) == FAIL
- || list_append_number(l2, idx) == FAIL
+ if (list_append_list(rettv->vval.v_list, l2) == FAIL)
+ {
+ vim_free(l2);
+ break;
+ }
+ if (list_append_number(l2, idx) == FAIL
|| list_append_string(l2, p, len) == FAIL)
break;
p += len;
if (items[i].score == SCORE_NONE)
break;
if (items[i].lmatchpos != NULL
- && list_append_list(retlist, items[i].lmatchpos)
- == FAIL)
+ && list_append_list(retlist, items[i].lmatchpos) == FAIL)
goto done;
}
if (l == NULL)
goto done;
if (list_append_list(rettv->vval.v_list, l) == FAIL)
+ {
+ vim_free(l);
goto done;
+ }
l = list_alloc();
if (l == NULL)
goto done;
if (list_append_list(rettv->vval.v_list, l) == FAIL)
+ {
+ vim_free(l);
goto done;
+ }
l = list_alloc();
if (l == NULL)
goto done;
if (list_append_list(rettv->vval.v_list, l) == FAIL)
+ {
+ vim_free(l);
goto done;
+ }
}
fuzzy_match_in_list(argvars[0].vval.v_list, tv_get_string(&argvars[1]),
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 338,
/**/
337,
/**/