summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2014-07-19 14:42:47 +0200
committerJo-Philipp Wich <jow@openwrt.org>2014-07-19 14:42:51 +0200
commit8dd290b85ee8d57026581891e9a34945d077fa3b (patch)
treeb99d74b329517203d37e33c4d913f4f8e7fe3aec
parentbba31cce0521e014109fc805671d4cff7ee9dbf6 (diff)
downloadfirewall3-8dd290b85ee8d57026581891e9a34945d077fa3b.tar.gz
options: fix logic flaw when parsing ipaddr/mask notation
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
-rw-r--r--options.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/options.c b/options.c
index 292f5fc..0a796a4 100644
--- a/options.c
+++ b/options.c
@@ -268,12 +268,15 @@ fw3_parse_address(void *ptr, const char *val, bool is_list)
addr.family = FW3_FAMILY_V6;
addr.address.v6 = v6;
- if (m && !inet_pton(AF_INET6, m, &addr.mask.v6))
+ if (m)
{
- bits = strtol(m, &e, 10);
+ if (!inet_pton(AF_INET6, m, &v6))
+ {
+ bits = strtol(m, &e, 10);
- if ((*e != 0) || !fw3_bitlen2netmask(addr.family, bits, &v6))
- goto fail;
+ if ((*e != 0) || !fw3_bitlen2netmask(addr.family, bits, &v6))
+ goto fail;
+ }
addr.mask.v6 = v6;
}
@@ -294,12 +297,15 @@ fw3_parse_address(void *ptr, const char *val, bool is_list)
addr.family = FW3_FAMILY_V4;
addr.address.v4 = v4;
- if (m && !inet_pton(AF_INET, m, &addr.mask.v4))
+ if (m)
{
- bits = strtol(m, &e, 10);
+ if (!inet_pton(AF_INET, m, &v4))
+ {
+ bits = strtol(m, &e, 10);
- if ((*e != 0) || !fw3_bitlen2netmask(addr.family, bits, &v4))
- goto fail;
+ if ((*e != 0) || !fw3_bitlen2netmask(addr.family, bits, &v4))
+ goto fail;
+ }
addr.mask.v4 = v4;
}