]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Fixed assert-crash with net_is_in_network(family=ipv6, family=0, ..)
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 4 Jan 2016 19:00:19 +0000 (14:00 -0500)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 4 Jan 2016 19:12:22 +0000 (14:12 -0500)
src/lib/net.c
src/lib/test-net.c

index f998cb9512ea9e90a45c1598496666856cc1c484..ae9b477037b11f32987eb60e1c2bc1602a588ef9 100644 (file)
@@ -1125,7 +1125,7 @@ bool net_is_in_network(const struct ip_addr *ip,
                ip = &tmp_ip;
        }
 
-       if (ip->family == 0) {
+       if (ip->family == 0 || net_ip->family == 0) {
                /* non-IPv4/IPv6 address (e.g. UNIX socket) never matches
                   anything */
                return FALSE;
index ed89ac762bd25d24356dd004cf3f43240e25c0fb..6578f832e9dd7bdf4867593a11d4c7bfe0a0c6ed 100644 (file)
@@ -46,6 +46,19 @@ static void test_net_is_in_network(void)
                        input[i].ret;
                test_out(t_strdup_printf("net_is_in_network(%u)", i), success);
        }
+       /* make sure non-IPv4 and non-IPv6 ip_addrs fail */
+       test_assert(net_addr2ip("127.0.0.1", &ip) == 0);
+       net_ip = ip;
+       net_ip.family = 0;
+       test_assert(!net_is_in_network(&ip, &net_ip, 0));
+       test_assert(!net_is_in_network(&net_ip, &ip, 0));
+#ifdef HAVE_IPV6
+       test_assert(net_addr2ip("::1", &ip) == 0);
+       net_ip = ip;
+       net_ip.family = 0;
+       test_assert(!net_is_in_network(&ip, &net_ip, 0));
+       test_assert(!net_is_in_network(&net_ip, &ip, 0));
+#endif
        test_end();
 }