patch 9.0.0338: return value of list_append_list() not always checked
Problem: Return value of list_append_list() not always checked.
Solution: Check return value and handle failure.
diff --git a/src/list.c b/src/list.c
index 7bc34db..5e70f21 100644
--- a/src/list.c
+++ b/src/list.c
@@ -1076,8 +1076,12 @@
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;
}
@@ -1108,8 +1112,12 @@
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;