From 850563d175e29ddcc90472dfee6fd9b261a5dc40 Mon Sep 17 00:00:00 2001 From: attilamolnar Date: Wed, 5 Dec 2012 19:59:34 +0100 Subject: Fix expired xlines being treated as live ones in XLineManager::AddLine() This fixes ADDLINEs not being propagated and /gline etc. failing for already existing but expired xlines Special thanks to @JDowny (TinMan) for his detailed report and cooperation that made this fix possible Fixes #306 reported by @TurkDesk Fixes #379 reported by @JDowny --- src/xline.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/xline.cpp b/src/xline.cpp index 6501a7f6d..66d24f439 100644 --- a/src/xline.cpp +++ b/src/xline.cpp @@ -262,7 +262,12 @@ bool XLineManager::AddLine(XLine* line, User* user) LookupIter i = x->second.find(line->Displayable()); if (i != x->second.end()) { - return false; + // XLine propagation bug was here, if the line to be added already exists and + // it's expired then expire it and add the new one instead of returning false + if ((!i->second->duration) || (ServerInstance->Time() < i->second->expiry)) + return false; + + ExpireLine(x, i); } } -- cgit v1.2.3