+2003-01-11 Thomas Helvey <tom.helvey@cox.net>
+ * ircd/client.c, ircd/ircd_feature.c: Bugfix, the feature
+ table data was in a different order than the feature data
+ structure, which resulted in a wild index being used in
+ feature_bool. The feature_bool function didn't check it's
+ index before indexing the features array resulting in
+ a core dump on /oper.
2003-01-10 Thomas Helvey <tom.helvey@cox.net>
* include/client.h, include/res.h, include/s_bsd.h,
ircd/ircd.c, ircd/list.c ircd/m_connect.c, ircd/res_adns.c,
static struct
{
enum Priv priv;
+ enum Feature feat;
enum
{
FEATFLAG_DISABLES_PRIV,
FEATFLAG_LOCAL_OPERS,
FEATFLAG_ALL_OPERS
} flag;
- enum Feature feat;
} feattab[] =
{
{ PRIV_WHOX, FEAT_LAST_F, FEATFLAG_ALL_OPERS },
{
if (PrivHas(&oper->privs_dirty, feattab[i].priv))
continue;
- if (feattab[i].feat != FEAT_LAST_F && !feature_bool(feattab[i].priv))
+ if (feattab[i].feat != FEAT_LAST_F && !feature_bool(feattab[i].feat))
continue;
switch (feattab[i].flag)
{
int
feature_bool(enum Feature feat)
{
+ assert(feat <= FEAT_LAST_F);
+ if (FEAT_LAST_F < feat)
+ return 0;
assert(features[feat].feat == feat);
assert((features[feat].flags & FEAT_MASK) == FEAT_BOOL);