git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@1326
c9e4aea6-c8fd-4c43-8297-
357d70d61c8c
+2005-03-08 Michael Poole <mdpoole@troilus.org>
+
+ * ircd/match.c (ipmask_parse): Explicitly zero-initialize the mask
+ and bit count for "*".
+ (ipmask_check): Make more robust to similar errors.
+
2005-03-07 Michael Poole <mdpoole@troilus.org>
* configure.in: Consistently use a constant in AC_DEFINE().
bits += 96;
} else if (in[0] == '*' && in[1] == '\0') {
/* accept as a 0-bit mask */
+ memset(&mask->in6_16, 0, sizeof(mask->in6_16));
+ bits = 0;
} else {
if (!(p = strchr(in, '/')))
bits = 128;
for (k = 0; k < 8; k++) {
if (bits < 16)
- return (addr->in6_16[k] & htons(0xffff << (16-bits))) == mask->in6_16[k];
+ return !(htons(addr->in6_16[k] ^ mask->in6_16[k]) >> (16-bits));
if (addr->in6_16[k] != mask->in6_16[k])
return 0;
if (!(bits -= 16))