From a054c9a92c105354eac6161979be8a9327425a39 Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Mon, 30 May 2005 13:14:54 +0000 Subject: [PATCH] Fix the dereference of a free()'d struct in m_endburst.c. git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@1411 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- ChangeLog | 3 +++ ircd/m_endburst.c | 13 ++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 131f568..13bb5e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,9 @@ * ircd/IPcheck.c: Add Debug()s to try to track why the connected count underflows. + * ircd/m_endburst.c (ms_endofburst): Avoid dereferencing 'chan' + after it may be freed (in sub1_from_channel). + 2005-05-12 Michael Poole * configure.in: Do not try to outsmart the default CFLAGS. diff --git a/ircd/m_endburst.c b/ircd/m_endburst.c index aea0dec..46d51ae 100644 --- a/ircd/m_endburst.c +++ b/ircd/m_endburst.c @@ -126,13 +126,12 @@ int ms_end_of_burst(struct Client* cptr, struct Client* sptr, int parc, char* pa /* Count through channels... */ for (chan = GlobalChannelList; chan; chan = next_chan) { next_chan = chan->next; - - if (!chan->members) { /* empty channel */ - if ((chan->mode.mode & MODE_BURSTADDED)) - sub1_from_channel(chan); /* New empty channel, schedule it for removal. */ - } - - chan->mode.mode &= ~MODE_BURSTADDED; + if (!chan->members && (chan->mode.mode & MODE_BURSTADDED)) { + /* Newly empty channel, schedule it for removal. */ + chan->mode.mode &= ~MODE_BURSTADDED; + sub1_from_channel(chan); + } else + chan->mode.mode &= ~MODE_BURSTADDED; } return 0; -- 2.20.1