X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Futils_format_json.c;h=6a0c6642d14562ff309994e3c6447fc1a7266793;hp=67aebbaf8e0cb103890a6ce3b8b9d04f10b73c1d;hb=77ca1a45bab2f6adf9301723d0db68e5813a6d98;hpb=b165cd13cd30a30ac830df1f6f6fbd52474a6f64 diff --git a/src/utils_format_json.c b/src/utils_format_json.c index 67aebbaf..6a0c6642 100644 --- a/src/utils_format_json.c +++ b/src/utils_format_json.c @@ -95,7 +95,7 @@ static int values_to_json(char *buffer, size_t buffer_size, /* {{{ */ #define BUFFER_ADD(...) \ do { \ int status; \ - status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ + status = snprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) { \ sfree(rates); \ return -1; \ @@ -130,7 +130,7 @@ static int values_to_json(char *buffer, size_t buffer_size, /* {{{ */ else BUFFER_ADD("null"); } else if (ds->ds[i].type == DS_TYPE_COUNTER) - BUFFER_ADD("%llu", vl->values[i].counter); + BUFFER_ADD("%" PRIu64, (uint64_t)vl->values[i].counter); else if (ds->ds[i].type == DS_TYPE_DERIVE) BUFFER_ADD("%" PRIi64, vl->values[i].derive); else if (ds->ds[i].type == DS_TYPE_ABSOLUTE) @@ -159,7 +159,7 @@ static int dstypes_to_json(char *buffer, size_t buffer_size, /* {{{ */ #define BUFFER_ADD(...) \ do { \ int status; \ - status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ + status = snprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) \ return -1; \ else if (((size_t)status) >= (buffer_size - offset)) \ @@ -193,7 +193,7 @@ static int dsnames_to_json(char *buffer, size_t buffer_size, /* {{{ */ #define BUFFER_ADD(...) \ do { \ int status; \ - status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ + status = snprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) \ return -1; \ else if (((size_t)status) >= (buffer_size - offset)) \ @@ -228,7 +228,7 @@ static int meta_data_keys_to_json(char *buffer, size_t buffer_size, /* {{{ */ #define BUFFER_ADD(...) \ do { \ - status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ + status = snprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) \ return -1; \ else if (((size_t)status) >= (buffer_size - offset)) \ @@ -318,7 +318,7 @@ static int value_list_to_json(char *buffer, size_t buffer_size, /* {{{ */ #define BUFFER_ADD(...) \ do { \ - status = ssnprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ + status = snprintf(buffer + offset, buffer_size - offset, __VA_ARGS__); \ if (status < 1) \ return -1; \ else if (((size_t)status) >= (buffer_size - offset)) \ @@ -500,6 +500,14 @@ static int json_add_string(yajl_gen g, char const *str) /* {{{ */ } \ } while (0) +#define CHECK_SUCCESS(cmd) \ + do { \ + yajl_gen_status s = (cmd); \ + if (s != yajl_gen_status_ok) { \ + return (int)s; \ + } \ + } while (0) + static int format_json_meta(yajl_gen g, notification_meta_t *meta) /* {{{ */ { if (meta == NULL) @@ -525,7 +533,7 @@ static int format_json_meta(yajl_gen g, notification_meta_t *meta) /* {{{ */ default: ERROR("format_json_meta: unknown meta data type %d (name \"%s\")", meta->type, meta->name); - yajl_gen_null(g); + CHECK_SUCCESS(yajl_gen_null(g)); } return format_json_meta(g, meta->next); @@ -544,14 +552,14 @@ static int format_time(yajl_gen g, cdtime_t t) /* {{{ */ static int format_alert(yajl_gen g, notification_t const *n) /* {{{ */ { - yajl_gen_array_open(g); - yajl_gen_map_open(g); /* BEGIN alert */ + CHECK_SUCCESS(yajl_gen_array_open(g)); /* BEGIN array */ + CHECK_SUCCESS(yajl_gen_map_open(g)); /* BEGIN alert */ /* * labels */ JSON_ADD(g, "labels"); - yajl_gen_map_open(g); /* BEGIN labels */ + CHECK_SUCCESS(yajl_gen_map_open(g)); /* BEGIN labels */ JSON_ADD(g, "alertname"); if (strncmp(n->plugin, n->type, strlen(n->plugin)) == 0) @@ -577,36 +585,40 @@ static int format_alert(yajl_gen g, notification_t const *n) /* {{{ */ } JSON_ADD(g, "severity"); - JSON_ADD(g, (n->severity == NOTIF_FAILURE) - ? "FAILURE" - : (n->severity == NOTIF_WARNING) - ? "WARNING" - : (n->severity == NOTIF_OKAY) ? "OKAY" : "UNKNOWN"); + JSON_ADD(g, + (n->severity == NOTIF_FAILURE) + ? "FAILURE" + : (n->severity == NOTIF_WARNING) + ? "WARNING" + : (n->severity == NOTIF_OKAY) ? "OKAY" : "UNKNOWN"); JSON_ADD(g, "service"); JSON_ADD(g, "collectd"); - yajl_gen_map_close(g); /* END labels */ + CHECK_SUCCESS(yajl_gen_map_close(g)); /* END labels */ /* * annotations */ JSON_ADD(g, "annotations"); - yajl_gen_map_open(g); /* BEGIN annotations */ + CHECK_SUCCESS(yajl_gen_map_open(g)); /* BEGIN annotations */ JSON_ADD(g, "summary"); JSON_ADD(g, n->message); - if (format_json_meta(g, n->meta) != 0) + if (format_json_meta(g, n->meta) != 0) { return -1; + } - yajl_gen_map_close(g); /* END annotations */ + CHECK_SUCCESS(yajl_gen_map_close(g)); /* END annotations */ JSON_ADD(g, "startsAt"); - format_time(g, n->time); + if (format_time(g, n->time) != 0) { + return -1; + } - yajl_gen_map_close(g); /* END alert */ - yajl_gen_array_close(g); + CHECK_SUCCESS(yajl_gen_map_close(g)); /* END alert */ + CHECK_SUCCESS(yajl_gen_array_close(g)); /* END array */ return 0; } /* }}} format_alert */ @@ -671,7 +683,11 @@ int format_json_notification(char *buffer, size_t buffer_size, /* {{{ */ } /* copy to output buffer */ - yajl_gen_get_buf(g, &out, &unused_out_len); + if (yajl_gen_get_buf(g, &out, &unused_out_len) != yajl_gen_status_ok) { + yajl_gen_clear(g); + yajl_gen_free(g); + return -1; + } sstrncpy(buffer, (void *)out, buffer_size); yajl_gen_clear(g);