diff options
author | Steven Barth <steven@midlink.org> | 2013-01-22 16:42:40 +0100 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2013-01-22 16:42:40 +0100 |
commit | 7496f70e45964d9e4ac870582c8e4e3ce7c56ad6 (patch) | |
tree | 4cee55c391fd2c9b73c409c6bcc0cea23ffeb024 /interface-ip.c | |
parent | f04430a371c2628193ced7dd1ff1a0f0dd01e70d (diff) |
Don't segfault with an unset ula_prefix
Diffstat (limited to 'interface-ip.c')
-rw-r--r-- | interface-ip.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/interface-ip.c b/interface-ip.c index 892631d..ea4c3dd 100644 --- a/interface-ip.c +++ b/interface-ip.c @@ -634,12 +634,18 @@ void interface_ip_set_ula_prefix(const char *prefix) { char buf[INET6_ADDRSTRLEN + 4] = {0}, *saveptr; - strncpy(buf, prefix, sizeof(buf) - 1); + if (prefix) + strncpy(buf, prefix, sizeof(buf) - 1); char *prefixaddr = strtok_r(buf, "/", &saveptr); struct in6_addr addr; - if (!prefixaddr || inet_pton(AF_INET6, prefixaddr, &addr) < 1) + if (!prefixaddr || inet_pton(AF_INET6, prefixaddr, &addr) < 1) { + if (ula_prefix) { + interface_update_prefix(NULL, NULL, &ula_prefix->node); + ula_prefix = NULL; + } return; + } int length; char *prefixlen = strtok_r(NULL, ",", &saveptr); |