X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fsubnet_parse.c;h=611d6bd4415a83a2c4e99a921ce6f5c1df46aae8;hp=5b0b4822eed56d862aeef1ff3de35b94878d714b;hb=0c7e0210d900185d4c1a9ffd969dc2a26d9523a9;hpb=23a22ea1ceb9d0a6b6c288142130f0e30c0fdec9 diff --git a/src/subnet_parse.c b/src/subnet_parse.c index 5b0b4822..611d6bd4 100644 --- a/src/subnet_parse.c +++ b/src/subnet_parse.c @@ -186,6 +186,7 @@ int subnet_compare(const subnet_t *a, const subnet_t *b) { bool str2net(subnet_t *subnet, const char *subnetstr) { char str[1024]; strncpy(str, subnetstr, sizeof(str)); + str[sizeof str - 1] = 0; int consumed; int weight = DEFAULT_WEIGHT; @@ -255,7 +256,7 @@ bool str2net(subnet_t *subnet, const char *subnetstr) { for (int i = 0; i < 4; i++) if (x[i] > 255) return false; - sprintf(last_colon, ":%02hx%02hx:%02hx%02hx", x[0], x[1], x[2], x[3]); + snprintf(last_colon, sizeof str - (last_colon - str), ":%02x%02x:%02x%02x", x[0], x[1], x[2], x[3]); } char* double_colon = strstr(str, "::"); @@ -314,7 +315,7 @@ bool net2str(char *netstr, int len, const subnet_t *subnet) { int prefixlength = -1; switch (subnet->type) { case SUBNET_MAC: - result = snprintf(netstr, len, "%02hx:%02hx:%02hx:%02hx:%02hx:%02hx", + result = snprintf(netstr, len, "%02x:%02x:%02x:%02x:%02x:%02x", subnet->net.mac.address.x[0], subnet->net.mac.address.x[1], subnet->net.mac.address.x[2], @@ -326,7 +327,7 @@ bool net2str(char *netstr, int len, const subnet_t *subnet) { break; case SUBNET_IPV4: - result = snprintf(netstr, len, "%hu.%hu.%hu.%hu", + result = snprintf(netstr, len, "%u.%u.%u.%u", subnet->net.ipv4.address.x[0], subnet->net.ipv4.address.x[1], subnet->net.ipv4.address.x[2], @@ -400,11 +401,8 @@ bool net2str(char *netstr, int len, const subnet_t *subnet) { len -= result; } - if (subnet->weight != DEFAULT_WEIGHT) { + if (subnet->weight != DEFAULT_WEIGHT) snprintf(netstr, len, "#%d", subnet->weight); - netstr += result; - len -= result; - } return true; }