#include "client.h"
#include "ircd.h"
#include "match.h"
+#include "s_assert.h"
/*
* Compare if a given string (name) matches the given
* is a number; '@' means match exactly one character that is a
* letter; '\s' means match a space.
*
- * This function supports escaping, so that a wildcard may be matched
+ * This function supports escaping, so that a wildcard may be matched
* exactly.
*
* @param[in] mask Wildcard-containing mask.
return 1;
if(quote)
return 0;
- for(m--; (m > (const unsigned char *)mask) && (*m == '?'); m--);;
+ for(m--; (m > (const unsigned char *)mask) && (*m == '?'); m--)
+ ;
if(*m == '*' && (m > (const unsigned char *)mask))
return 1;
if (addr->sa_family == AF_INET)
{
- iaddr = &((struct sockaddr_in *)addr)->sin_addr;
- idest = &((struct sockaddr_in *)dest)->sin_addr;
+ iaddr = &((struct sockaddr_in *)(void *)addr)->sin_addr;
+ idest = &((struct sockaddr_in *)(void *)dest)->sin_addr;
}
#ifdef RB_IPV6
else
{
- iaddr = &((struct sockaddr_in6 *)addr)->sin6_addr;
- idest = &((struct sockaddr_in6 *)dest)->sin6_addr;
+ iaddr = &((struct sockaddr_in6 *)(void *)addr)->sin6_addr;
+ idest = &((struct sockaddr_in6 *)(void *)dest)->sin6_addr;
}
#endif
*len++ = '\0';
cidrlen = atoi(len);
- if (cidrlen == 0)
+ if (cidrlen <= 0)
return 0;
#ifdef RB_IPV6
if (strchr(mask, ':') && strchr(address, ':'))
{
+ if (cidrlen > 128)
+ return 0;
+
aftype = AF_INET6;
ipptr = &((struct sockaddr_in6 *)&ipaddr)->sin6_addr;
maskptr = &((struct sockaddr_in6 *)&maskaddr)->sin6_addr;
#endif
if (!strchr(mask, ':') && !strchr(address, ':'))
{
+ if (cidrlen > 32)
+ return 0;
+
aftype = AF_INET;
ipptr = &((struct sockaddr_in *)&ipaddr)->sin_addr;
maskptr = &((struct sockaddr_in *)&maskaddr)->sin_addr;
*len++ = '\0';
cidrlen = atoi(len);
- if (cidrlen == 0)
+ if (cidrlen <= 0)
return 0;
#ifdef RB_IPV6
if (strchr(ip, ':') && strchr(ipmask, ':'))
{
+ if (cidrlen > 128)
+ return 0;
+
aftype = AF_INET6;
ipptr = &((struct sockaddr_in6 *)&ipaddr)->sin6_addr;
maskptr = &((struct sockaddr_in6 *)&maskaddr)->sin6_addr;
#endif
if (!strchr(ip, ':') && !strchr(ipmask, ':'))
{
+ if (cidrlen > 32)
+ return 0;
+
aftype = AF_INET;
ipptr = &((struct sockaddr_in *)&ipaddr)->sin_addr;
maskptr = &((struct sockaddr_in *)&maskaddr)->sin_addr;
/* 26 */ CNTRL_C | CHAN_C | NONEOS_C,
/* 27 */ CNTRL_C | CHAN_C | NONEOS_C,
/* 28 */ CNTRL_C | CHAN_C | NONEOS_C,
-/* 29 */ CNTRL_C | CHAN_C | NONEOS_C | FCHAN_C,
+/* 29 */ CNTRL_C | CHAN_C | FCHAN_C | NONEOS_C,
/* 30 */ CNTRL_C | CHAN_C | NONEOS_C,
/* 31 */ CNTRL_C | CHAN_C | FCHAN_C | NONEOS_C,
/* SP */ PRINT_C | SPACE_C,
/* ! */ PRINT_C | KWILD_C | CHAN_C | NONEOS_C,
/* " */ PRINT_C | CHAN_C | NONEOS_C,
/* # */ PRINT_C | MWILD_C | CHANPFX_C | CHAN_C | NONEOS_C,
-/* $ */ PRINT_C | CHAN_C | NONEOS_C | USER_C,
+/* $ */ PRINT_C | CHAN_C | NONEOS_C,
/* % */ PRINT_C | CHAN_C | NONEOS_C,
/* & */ PRINT_C | CHANPFX_C | CHAN_C | NONEOS_C,
/* ' */ PRINT_C | CHAN_C | NONEOS_C,