X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flibcollectdclient%2Fnetwork_parse.c;h=73ef02476fc5fde0009543b00dc0aeba355ab3a5;hb=master;hp=a8f6bd61c8b541a20451c122a9b8b0195448730b;hpb=d486225f89ea52d8ed2b4242eba2ad94c409f837;p=collectd.git diff --git a/src/libcollectdclient/network_parse.c b/src/libcollectdclient/network_parse.c index a8f6bd61..73ef0247 100644 --- a/src/libcollectdclient/network_parse.c +++ b/src/libcollectdclient/network_parse.c @@ -154,11 +154,12 @@ static int parse_string(void *payload, size_t payload_size, char *out, size_t out_size) { char *in = payload; - if ((payload_size < 1) || (in[payload_size - 1] != 0) || + if ((payload_size < 1) || (in[payload_size - 1] != '\0') || (payload_size > out_size)) return EINVAL; - strncpy(out, in, out_size); + strncpy(out, in, out_size - 1); + out[out_size - 1] = '\0'; return 0; } @@ -292,7 +293,8 @@ static double ntohd(double val) /* {{{ */ static int parse_values(void *payload, size_t payload_size, lcc_value_list_t *state) { buffer_t *b = &(buffer_t){ - .data = payload, .len = payload_size, + .data = payload, + .len = payload_size, }; uint16_t n; @@ -303,8 +305,8 @@ static int parse_values(void *payload, size_t payload_size, return EINVAL; state->values_len = (size_t)n; - state->values = calloc(sizeof(*state->values), state->values_len); - state->values_types = calloc(sizeof(*state->values_types), state->values_len); + state->values = calloc(state->values_len, sizeof(*state->values)); + state->values_types = calloc(state->values_len, sizeof(*state->values_types)); if ((state->values == NULL) || (state->values_types == NULL)) { return ENOMEM; } @@ -400,7 +402,8 @@ static int parse_sign_sha256(void *signature, size_t signature_len, } buffer_t *b = &(buffer_t){ - .data = signature, .len = signature_len, + .data = signature, + .len = signature_len, }; uint8_t hash[32]; @@ -458,7 +461,8 @@ static int parse_encrypt_aes256(void *data, size_t data_size, } buffer_t *b = &(buffer_t){ - .data = data, .len = data_size, + .data = data, + .len = data_size, }; uint16_t username_len; @@ -507,7 +511,8 @@ static int parse_encrypt_aes256(void *data, size_t data_size, static int network_parse(void *data, size_t data_size, lcc_security_level_t sl, lcc_network_parse_options_t const *opts) { buffer_t *b = &(buffer_t){ - .data = data, .len = data_size, + .data = data, + .len = data_size, }; lcc_value_list_t state = {0};