Visibility = NULL;
ip = NULL;
MyClass = NULL;
+ io = NULL;
+ AllowedUserModes = NULL;
+ AllowedChanModes = NULL;
AllowedOperCommands = NULL;
- memset(AllowedUserModes, 0, sizeof(AllowedUserModes));
- memset(AllowedChanModes, 0, sizeof(AllowedChanModes));
chans.clear();
invites.clear();
memset(modes,0,sizeof(modes));
AllowedOperCommands = NULL;
}
+ if (this->AllowedUserModes)
+ {
+ delete[] AllowedUserModes;
+ AllowedUserModes = NULL;
+ }
+
+ if (this->AllowedChanModes)
+ {
+ delete[] AllowedChanModes;
+ AllowedChanModes = NULL;
+ }
+
this->InvalidateCache();
this->DecrementModes();
if (!IS_OPER(this))
return false;
+ if (!AllowedUserModes || !AllowedChanModes)
+ return false;
+
return ((type == MODETYPE_USER ? AllowedUserModes : AllowedChanModes))[(mode - 'A')];
}
else
AllowedOperCommands = new std::map<std::string, bool>;
+ if (!AllowedChanModes)
+ AllowedChanModes = new bool[64];
+
+ if (!AllowedUserModes)
+ AllowedUserModes = new bool[64];
+
+ memset(AllowedUserModes, 0, 64);
+ memset(AllowedChanModes, 0, 64);
+
char* Classes = strdup(iter_opertype->second);
char* myclass = strtok_r(Classes," ",&savept);
while (myclass)
{
if (*c == '*')
{
- memset(this->AllowedUserModes, (int)(true), sizeof(this->AllowedUserModes));
+ memset(this->AllowedUserModes, (int)(true), 64);
}
else
{
{
if (*c == '*')
{
- memset(this->AllowedChanModes, (int)(true), sizeof(this->AllowedChanModes));
+ memset(this->AllowedChanModes, (int)(true), 64);
}
else
{
delete AllowedOperCommands;
AllowedOperCommands = NULL;
}
+ if (AllowedUserModes)
+ {
+ delete[] AllowedUserModes;
+ AllowedUserModes = NULL;
+ }
+ if (AllowedChanModes)
+ {
+ delete[] AllowedChanModes;
+ AllowedChanModes = NULL;
+ }
+
}
}
return;
}
- if (ServerInstance->Config->GetIOHook(this->GetPort()))
+ if (this->io)
{
/* XXX: The lack of buffering here is NOT a bug, modules implementing this interface have to
* implement their own buffering mechanisms
*/
try
{
- ServerInstance->Config->GetIOHook(this->GetPort())->OnRawSocketWrite(this->fd, text.data(), text.length());
+ this->io->OnRawSocketWrite(this->fd, text.data(), text.length());
}
catch (CoreException& modexcept)
{