CModule::OnMode(): Fix a stupid NULL pointer dereference
When joining a channel, OnMode() (via SetModes()) was called with pOpNick == NULL. This bad pointer was turned into a reference and given to modules. This bug exists since 2008 when the OnMode() module call was added. It wasn't noticed before because apparently no module used this CNick argument before. Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
1 parent
2b51222245
commit
8ffab186b4
1 file changed
+10
-8
+10
-8
@@ -332,15 +332,17 @@ void CChan::ModeChange(const CString& sModes, const CNick* pOpNick) {
|
||||
break;
|
||||
}
|
||||
|
||||
bool bNoChange;
|
||||
if (bList) {
|
||||
bNoChange = false;
|
||||
} else if (bAdd) {
|
||||
bNoChange = HasMode(uMode) && GetModeArg(uMode) == sArg;
|
||||
} else {
|
||||
bNoChange = !HasMode(uMode);
|
||||
if (pOpNick) {
|
||||
bool bNoChange;
|
||||
if (bList) {
|
||||
bNoChange = false;
|
||||
} else if (bAdd) {
|
||||
bNoChange = HasMode(uMode) && GetModeArg(uMode) == sArg;
|
||||
} else {
|
||||
bNoChange = !HasMode(uMode);
|
||||
}
|
||||
NETWORKMODULECALL(OnMode(*pOpNick, *this, uMode, sArg, bAdd, bNoChange), m_pNetwork->GetUser(), m_pNetwork, NULL, NOTHING);
|
||||
}
|
||||
NETWORKMODULECALL(OnMode(*pOpNick, *this, uMode, sArg, bAdd, bNoChange), m_pNetwork->GetUser(), m_pNetwork, NULL, NOTHING);
|
||||
|
||||
if (!bList) {
|
||||
(bAdd) ? AddMode(uMode, sArg) : RemMode(uMode);
|
||||
|
||||
Reference in new issue
Block a user