garray.c: Prevent ga_concat() using memcpy(NULL,...)

Calling ga_grow(gap, 0) does not reallocate memory for garray gap.
Because of this, gap->ga_data can be NULL after such a call, if gap does
not have memory allocated.
This commit is contained in:
oni-link
2015-09-30 18:50:20 +02:00
parent 622ec95c3f
commit 0320d86d3b

View File

@@ -184,10 +184,12 @@ char_u* ga_concat_strings(const garray_T *gap) FUNC_ATTR_NONNULL_RET
void ga_concat(garray_T *gap, const char_u *restrict s)
{
int len = (int)strlen((char *) s);
ga_grow(gap, len);
char *data = gap->ga_data;
memcpy(data + gap->ga_len, s, (size_t) len);
gap->ga_len += len;
if (len) {
ga_grow(gap, len);
char *data = gap->ga_data;
memcpy(data + gap->ga_len, s, (size_t)len);
gap->ga_len += len;
}
}
/// Append one byte to a growarray which contains bytes.