patch 8.1.1219: not checking for NULL return from alloc()
Problem: Not checking for NULL return from alloc().
Solution: Add checks. (Martin Kunev, closes #4303, closes #4174)
diff --git a/src/ops.c b/src/ops.c
index e939f04..2aa18c4 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -6170,21 +6170,25 @@
y_ptr->y_size = linecount;
y_ptr->y_time_set = timestamp;
if (linecount == 0)
- y_ptr->y_array = NULL;
- else
{
- y_ptr->y_array =
- (char_u **)alloc((unsigned)(linecount * sizeof(char_u *)));
- for (i = 0; i < linecount; i++)
+ y_ptr->y_array = NULL;
+ return;
+ }
+ y_ptr->y_array = (char_u **)alloc((unsigned)(linecount * sizeof(char_u *)));
+ if (y_ptr->y_array == NULL)
+ {
+ y_ptr->y_size = 0; // ensure object state is consistent
+ return;
+ }
+ for (i = 0; i < linecount; i++)
+ {
+ if (vp[i + 6].bv_allocated)
{
- if (vp[i + 6].bv_allocated)
- {
- y_ptr->y_array[i] = vp[i + 6].bv_string;
- vp[i + 6].bv_string = NULL;
- }
- else
- y_ptr->y_array[i] = vim_strsave(vp[i + 6].bv_string);
+ y_ptr->y_array[i] = vp[i + 6].bv_string;
+ vp[i + 6].bv_string = NULL;
}
+ else
+ y_ptr->y_array[i] = vim_strsave(vp[i + 6].bv_string);
}
}