From 600f91f128802ea6225d457b7247aba4a4119362 Mon Sep 17 00:00:00 2001 From: Alexey Sokolov Date: Sun, 11 Jan 2015 17:07:23 +0000 Subject: [PATCH] Fix implicit context of OnSendTo* hooks Thanks for markus-j for reporting it --- include/znc/main.h | 28 ++++++++++++++-------------- src/Client.cpp | 2 +- src/IRCSock.cpp | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/include/znc/main.h b/include/znc/main.h index 4f701fa9..254937e3 100644 --- a/include/znc/main.h +++ b/include/znc/main.h @@ -77,30 +77,30 @@ extern bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER; #define _USERMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, macEXITER) \ do { \ - assert(macUSER != NULL); \ bool bGlobalExited = false; \ _GLOBALMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, &bGlobalExited); \ if (bGlobalExited) { \ *macEXITER = true; \ break; \ } \ - CModules& UMods = macUSER->GetModules(); \ - CIRCNetwork* pOldUNetwork = UMods.GetNetwork(); \ - CClient* pOldUClient = UMods.GetClient(); \ - UMods.SetNetwork(macNETWORK); \ - UMods.SetClient(macCLIENT); \ - if (UMods.macFUNC) { \ - UMods.SetNetwork(pOldUNetwork); \ - UMods.SetClient(pOldUClient); \ - *macEXITER = true; \ - } \ - UMods.SetNetwork(pOldUNetwork); \ - UMods.SetClient(pOldUClient); \ + if (macUSER != nullptr) { \ + CModules& UMods = macUSER->GetModules(); \ + CIRCNetwork* pOldUNetwork = UMods.GetNetwork(); \ + CClient* pOldUClient = UMods.GetClient(); \ + UMods.SetNetwork(macNETWORK); \ + UMods.SetClient(macCLIENT); \ + if (UMods.macFUNC) { \ + UMods.SetNetwork(pOldUNetwork); \ + UMods.SetClient(pOldUClient); \ + *macEXITER = true; \ + } \ + UMods.SetNetwork(pOldUNetwork); \ + UMods.SetClient(pOldUClient); \ + } \ } while (false) #define NETWORKMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, macEXITER) \ do { \ - assert(macUSER != NULL); \ bool bUserExited = false; \ _USERMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, &bUserExited); \ if (bUserExited) { \ diff --git a/src/Client.cpp b/src/Client.cpp index e52fa63b..5c68d7d9 100644 --- a/src/Client.cpp +++ b/src/Client.cpp @@ -770,7 +770,7 @@ CString CClient::GetFullName() const { void CClient::PutClient(const CString& sLine) { bool bReturn = false; CString sCopy = sLine; - ALLMODULECALL(OnSendToClient(sCopy, *this), &bReturn); + NETWORKMODULECALL(OnSendToClient(sCopy, *this), m_pUser, m_pNetwork, this, &bReturn); if (bReturn) return; DEBUG("(" << GetFullName() << ") ZNC -> CLI [" << sCopy << "]"); Write(sCopy + "\r\n"); diff --git a/src/IRCSock.cpp b/src/IRCSock.cpp index e11a0afd..f37b52ed 100644 --- a/src/IRCSock.cpp +++ b/src/IRCSock.cpp @@ -1049,7 +1049,7 @@ void CIRCSock::TrySend() { m_iSendsAllowed--; bool bSkip = false; CString& sLine = m_vsSendQueue.front(); - ALLMODULECALL(OnSendToIRC(sLine), &bSkip); + IRCSOCKMODULECALL(OnSendToIRC(sLine), &bSkip); if (!bSkip) {; DEBUG("(" << m_pNetwork->GetUser()->GetUserName() << "/" << m_pNetwork->GetName() << ") ZNC -> IRC [" << sLine << "]"); Write(sLine + "\r\n");