Fix unsafe use of strncpy() and sprintf().
authorGuus Sliepen <guus@tinc-vpn.org>
Sat, 12 Jul 2014 12:35:29 +0000 (14:35 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Sat, 12 Jul 2014 12:35:29 +0000 (14:35 +0200)
The strncpy() problem was found by cppcheck.

src/subnet_parse.c

index 1d54c13..c919b59 100644 (file)
@@ -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, ":%02x%02x:%02x%02x", 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, "::");