X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fsnapshot.c;h=d2016a1656bae9b9ed0fede367534d05bd9d4b34;hp=8faf9a76a28f99f497c1b4542ed0acdfd5d5603f;hb=8ada111f6d3ab40d1c33cf1a7b2546de9a47d1d5;hpb=53efb85a242809ed5ed21e9ab40effa696ecbc6f diff --git a/src/bin/lttng-sessiond/snapshot.c b/src/bin/lttng-sessiond/snapshot.c index 8faf9a76a..d2016a165 100644 --- a/src/bin/lttng-sessiond/snapshot.c +++ b/src/bin/lttng-sessiond/snapshot.c @@ -15,7 +15,7 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -46,10 +46,11 @@ static int output_init(uint64_t max_size, const char *name, { int ret = 0, i; - assert(output); - memset(output, 0, sizeof(struct snapshot_output)); + /* + * max_size of -1ULL means unset. Set to default (unlimited). + */ if (max_size == (uint64_t) -1ULL) { max_size = 0; } @@ -61,7 +62,10 @@ static int output_init(uint64_t max_size, const char *name, lttng_ht_node_init_ulong(&output->node, (unsigned long) output->id); if (name && name[0] != '\0') { - strncpy(output->name, name, sizeof(output->name)); + if (lttng_strncpy(output->name, name, sizeof(output->name))) { + ret = -LTTNG_ERR_INVALID; + goto error; + } } else { /* Set default name. */ ret = snprintf(output->name, sizeof(output->name), "%s-%" PRIu32, @@ -92,8 +96,12 @@ static int output_init(uint64_t max_size, const char *name, if (uris[0].dtype == LTTNG_DST_PATH) { memset(output->consumer->dst.trace_path, 0, sizeof(output->consumer->dst.trace_path)); - strncpy(output->consumer->dst.trace_path, uris[0].dst.path, - sizeof(output->consumer->dst.trace_path)); + if (lttng_strncpy(output->consumer->dst.trace_path, + uris[0].dst.path, + sizeof(output->consumer->dst.trace_path))) { + ret = -LTTNG_ERR_INVALID; + goto error; + } output->consumer->type = CONSUMER_DST_LOCAL; ret = 0; goto end; @@ -221,7 +229,7 @@ void snapshot_output_destroy(struct snapshot_output *obj) if (obj->consumer) { consumer_output_send_destroy_relayd(obj->consumer); - consumer_destroy_output(obj->consumer); + consumer_output_put(obj->consumer); } free(obj); }