X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fcommon%2Fdynamic-buffer.c;h=c295a5d2eb378f58b557fdfa6c841de6667db810;hb=9d02a17a3c5926d49fde4e9ee3b2208152be8ef1;hp=ea26a51aca78297cea5b1a7b97840cdec97cf884;hpb=5966417eba59c9014c1f67ae37257e7266e647b5;p=lttng-tools.git diff --git a/src/common/dynamic-buffer.c b/src/common/dynamic-buffer.c index ea26a51ac..c295a5d2e 100644 --- a/src/common/dynamic-buffer.c +++ b/src/common/dynamic-buffer.c @@ -55,7 +55,8 @@ int lttng_dynamic_buffer_append(struct lttng_dynamic_buffer *buffer, goto end; } - if ((buffer->capacity - buffer->size) < len) { + assert(buffer->capacity >= buffer->size); + if (buffer->capacity < (len + buffer->size)) { ret = lttng_dynamic_buffer_set_capacity(buffer, buffer->capacity + (len - (buffer->capacity - buffer->size))); @@ -100,10 +101,22 @@ int lttng_dynamic_buffer_set_size(struct lttng_dynamic_buffer *buffer, } if (new_size > buffer->capacity) { + size_t original_size = buffer->size; + size_t original_capacity = buffer->capacity; + ret = lttng_dynamic_buffer_set_capacity(buffer, new_size); if (ret) { goto end; } + + /* + * Zero-initialize the space that was left in the buffer at the + * before we increased its capacity (original capacity - original size). + * The newly acquired capacity (new capacity - original capacity) + * is zeroed by lttng_dynamic_buffer_set_capacity(). + */ + memset(buffer->data + original_size, 0, + original_capacity - original_size); } else if (new_size > buffer->size) { memset(buffer->data + buffer->size, 0, new_size - buffer->size); } else {