diff --git a/plugins/out_stackdriver/gce_metadata.c b/plugins/out_stackdriver/gce_metadata.c index f988575d8bf..3dee452c09c 100644 --- a/plugins/out_stackdriver/gce_metadata.c +++ b/plugins/out_stackdriver/gce_metadata.c @@ -33,7 +33,7 @@ static int fetch_metadata(struct flb_stackdriver *ctx, struct flb_upstream *upstream, char *uri, - char *payload) + flb_sds_t *payload) { int ret; int ret_code; @@ -44,21 +44,30 @@ static int fetch_metadata(struct flb_stackdriver *ctx, /* If runtime test mode is enabled, add test data */ if (ctx->ins->test_mode == FLB_TRUE) { if (strcmp(uri, FLB_STD_METADATA_PROJECT_ID_URI) == 0) { - if (!flb_sds_cat(payload, "fluent-bit-test", 15)) { + flb_sds_t tmp; + tmp = flb_sds_cat(*payload, "fluent-bit-test", 15); + if (!tmp) { return -1; } + *payload = tmp; return 0; } else if (strcmp(uri, FLB_STD_METADATA_ZONE_URI) == 0) { - if (!flb_sds_cat(payload, "projects/0123456789/zones/fluent", 32)) { + flb_sds_t tmp; + tmp = flb_sds_cat(*payload, "projects/0123456789/zones/fluent", 32); + if (!tmp) { return -1; } + *payload = tmp; return 0; } else if (strcmp(uri, FLB_STD_METADATA_INSTANCE_ID_URI) == 0) { - if (!flb_sds_cat(payload, "333222111", 9)) { + flb_sds_t tmp; + tmp = flb_sds_cat(*payload, "333222111", 9); + if (!tmp) { return -1; } + *payload = tmp; return 0; } return -1; @@ -93,8 +102,15 @@ static int fetch_metadata(struct flb_stackdriver *ctx, /* The request was issued successfully, validate the 'error' field */ flb_plg_debug(ctx->ins, "HTTP Status=%i", c->resp.status); if (c->resp.status == 200) { - ret_code = 0; - flb_sds_copy(payload, c->resp.payload, c->resp.payload_size); + flb_sds_t tmp; + tmp = flb_sds_copy(*payload, c->resp.payload, c->resp.payload_size); + if (!tmp) { + ret_code = -1; + } + else { + *payload = tmp; + ret_code = 0; + } } else { if (c->resp.payload_size > 0) { @@ -150,7 +166,7 @@ int gce_metadata_read_token(struct flb_stackdriver *ctx) } uri = tmp; - ret = fetch_metadata(ctx, ctx->metadata_u, uri, payload); + ret = fetch_metadata(ctx, ctx->metadata_u, uri, &payload); if (ret != 0) { flb_plg_error(ctx->ins, "can't fetch token from the metadata server"); flb_sds_destroy(payload); @@ -180,7 +196,7 @@ int gce_metadata_read_zone(struct flb_stackdriver *ctx) flb_sds_t zone = NULL; ret = fetch_metadata(ctx, ctx->metadata_u, FLB_STD_METADATA_ZONE_URI, - payload); + &payload); if (ret != 0) { flb_plg_error(ctx->ins, "can't fetch zone from the metadata server"); flb_sds_destroy(payload); @@ -226,7 +242,7 @@ int gce_metadata_read_project_id(struct flb_stackdriver *ctx) flb_sds_t payload = flb_sds_create_size(4096); ret = fetch_metadata(ctx, ctx->metadata_u, - FLB_STD_METADATA_PROJECT_ID_URI, payload); + FLB_STD_METADATA_PROJECT_ID_URI, &payload); if (ret != 0) { flb_plg_error(ctx->ins, "can't fetch project id from the metadata server"); flb_sds_destroy(payload); @@ -243,7 +259,7 @@ int gce_metadata_read_instance_id(struct flb_stackdriver *ctx) flb_sds_t payload = flb_sds_create_size(4096); ret = fetch_metadata(ctx, ctx->metadata_u, - FLB_STD_METADATA_INSTANCE_ID_URI, payload); + FLB_STD_METADATA_INSTANCE_ID_URI, &payload); if (ret != 0) { flb_plg_error(ctx->ins, "can't fetch instance id from the metadata server"); flb_sds_destroy(payload); diff --git a/plugins/out_stackdriver/stackdriver.c b/plugins/out_stackdriver/stackdriver.c index c956c72db0f..212deadad8c 100644 --- a/plugins/out_stackdriver/stackdriver.c +++ b/plugins/out_stackdriver/stackdriver.c @@ -1164,6 +1164,9 @@ static int pack_resource_labels(struct flb_stackdriver *ctx, } else { flb_plg_warn(ctx->ins, "failed to find a corresponding entry for " "resource label entry [%s=%s]", label_kv->key, label_kv->val); + if (rval) { + flb_ra_key_value_destroy(rval); + } } flb_ra_destroy(ra); } else { @@ -2510,6 +2513,8 @@ static flb_sds_t stackdriver_format(struct flb_stackdriver *ctx, flb_sds_destroy(log_name); } + destroy_http_request(&http_request); + flb_log_event_decoder_destroy(&log_decoder); msgpack_sbuffer_destroy(&mp_sbuf); diff --git a/plugins/out_stackdriver/stackdriver_conf.c b/plugins/out_stackdriver/stackdriver_conf.c index edacc616824..3bf55865ff1 100644 --- a/plugins/out_stackdriver/stackdriver_conf.c +++ b/plugins/out_stackdriver/stackdriver_conf.c @@ -134,6 +134,9 @@ static int read_credentials_file(const char *cred_file, struct flb_stackdriver * ctx->creds->type = flb_sds_create_len(val, val_len); } else if (key_cmp(key, key_len, "project_id") == 0) { + if (ctx->project_id) { + flb_sds_destroy(ctx->project_id); + } ctx->project_id = flb_sds_create_len(val, val_len); } else if (key_cmp(key, key_len, "private_key_id") == 0) {