diff --git a/znc-crashbug.patch b/znc-crashbug.patch new file mode 100644 index 0000000..0995b80 --- /dev/null +++ b/znc-crashbug.patch @@ -0,0 +1,37 @@ +diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp +index 40a28d3..90ddfd2 100644 +--- a/modules/webadmin.cpp ++++ b/modules/webadmin.cpp +@@ -668,13 +668,19 @@ class CWebAdminMod : public CModule { + return true; + } + +- if (pNetwork->FindChan(sChanName.Token(0))) { +- WebSock.PrintErrorPage("Channel [" + sChanName.Token(0) + "] already exists"); ++ // This could change the channel name and e.g. add a "#" prefix ++ pChan = new CChan(sChanName, pNetwork, true); ++ ++ if (pNetwork->FindChan(pChan->GetName())) { ++ WebSock.PrintErrorPage("Channel [" + pChan->GetName() + "] already exists"); ++ delete pChan; + return true; + } + +- pChan = new CChan(sChanName, pNetwork, true); +- pNetwork->AddChan(pChan); ++ if (!pNetwork->AddChan(pChan)) { ++ WebSock.PrintErrorPage("Could not add channel [" + pChan->GetName() + "]"); ++ return true; ++ } + } + + pChan->SetBufferCount(WebSock.GetParam("buffercount").ToUInt(), spSession->IsAdmin()); +@@ -700,7 +706,7 @@ class CWebAdminMod : public CModule { + + CTemplate TmplMod; + TmplMod["User"] = pUser->GetUserName(); +- TmplMod["ChanName"] = sChanName; ++ TmplMod["ChanName"] = pChan->GetName(); + TmplMod["WebadminAction"] = "change"; + FOR_EACH_MODULE(it, pNetwork) { + (*it)->OnEmbeddedWebRequest(WebSock, "webadmin/channel", TmplMod);