X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fnetwork.c;h=439b0cef704d7d22404f73561faf4d2b3241729c;hb=17940d824d432c8f67706591d1188d69b07e93b6;hp=0c74e224c7bac7b6003dabc5dee7f2a1a4f842c4;hpb=bf1613564dfcb0a517b77d658a844ea37b45803f;p=collectd.git diff --git a/src/network.c b/src/network.c index 0c74e224..439b0cef 100644 --- a/src/network.c +++ b/src/network.c @@ -39,9 +39,6 @@ #if HAVE_PTHREAD_H # include #endif -#if HAVE_SYS_SOCKET_H -# include -#endif #if HAVE_NETDB_H # include #endif @@ -779,11 +776,11 @@ static int parse_part_values (void **ret_buffer, size_t *ret_buffer_len, uint16_t tmp16; size_t exp_size; - int i; + size_t i; uint16_t pkg_length; uint16_t pkg_type; - uint16_t pkg_numval; + size_t pkg_numval; uint8_t *pkg_types; value_t *pkg_values; @@ -805,7 +802,7 @@ static int parse_part_values (void **ret_buffer, size_t *ret_buffer_len, memcpy ((void *) &tmp16, buffer, sizeof (tmp16)); buffer += sizeof (tmp16); - pkg_numval = ntohs (tmp16); + pkg_numval = (size_t) ntohs (tmp16); assert (pkg_type == TYPE_VALUES); @@ -820,6 +817,7 @@ static int parse_part_values (void **ret_buffer, size_t *ret_buffer_len, exp_size, buffer_len); return (-1); } + assert (pkg_numval <= ((buffer_len - 6) / 9)); if (pkg_length != exp_size) { @@ -829,20 +827,20 @@ static int parse_part_values (void **ret_buffer, size_t *ret_buffer_len, return (-1); } - pkg_types = (uint8_t *) malloc (pkg_numval * sizeof (uint8_t)); - pkg_values = (value_t *) malloc (pkg_numval * sizeof (value_t)); + pkg_types = calloc (pkg_numval, sizeof (*pkg_types)); + pkg_values = calloc (pkg_numval, sizeof (*pkg_values)); if ((pkg_types == NULL) || (pkg_values == NULL)) { sfree (pkg_types); sfree (pkg_values); - ERROR ("network plugin: parse_part_values: malloc failed."); + ERROR ("network plugin: parse_part_values: calloc failed."); return (-1); } - memcpy ((void *) pkg_types, (void *) buffer, pkg_numval * sizeof (uint8_t)); - buffer += pkg_numval * sizeof (uint8_t); - memcpy ((void *) pkg_values, (void *) buffer, pkg_numval * sizeof (value_t)); - buffer += pkg_numval * sizeof (value_t); + memcpy (pkg_types, buffer, pkg_numval * sizeof (*pkg_types)); + buffer += pkg_numval * sizeof (*pkg_types); + memcpy (pkg_values, buffer, pkg_numval * sizeof (*pkg_values)); + buffer += pkg_numval * sizeof (*pkg_values); for (i = 0; i < pkg_numval; i++) { @@ -876,7 +874,7 @@ static int parse_part_values (void **ret_buffer, size_t *ret_buffer_len, *ret_buffer = buffer; *ret_buffer_len = buffer_len - pkg_length; - *ret_num_values = (size_t) pkg_numval; + *ret_num_values = pkg_numval; *ret_values = pkg_values; sfree (pkg_types);