[svn] Fix desyncs with very long extbans. Bans can now be upto 195 chars long.

This commit is contained in:
jilles 2007-11-07 15:45:14 -08:00
parent 5b87d08a05
commit 832942858c
5 changed files with 23 additions and 10 deletions

View file

@ -1,3 +1,13 @@
jilles 2007/11/07 21:45:14 UTC (20071107-3578)
Log:
allocate_channel(): no need to truncate name, its only caller already does it
furthermore, truncating here causes an inconsistent channel name
Changes: Modified:
+1 -1 trunk/src/channel.c (File Modified)
jilles 2007/10/27 21:56:53 UTC (20071027-3574)
Log:
Fix a memory leak.

View file

@ -21,7 +21,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: channel.h 2727 2006-11-09 23:48:45Z jilles $
* $Id: channel.h 3580 2007-11-07 23:45:14Z jilles $
*/
#ifndef INCLUDED_channel_h
@ -93,7 +93,7 @@ struct membership
unsigned long bants;
};
#define BANLEN NICKLEN+USERLEN+HOSTLEN+6
#define BANLEN 195
struct Ban
{
char *banstr;

View file

@ -1 +1 @@
#define SERNO "20071027-3574"
#define SERNO "20071107-3578"

View file

@ -21,7 +21,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: channel.c 3578 2007-11-07 21:45:14Z jilles $
* $Id: channel.c 3580 2007-11-07 23:45:14Z jilles $
*/
#include "stdinc.h"
@ -109,8 +109,8 @@ allocate_ban(const char *banstr, const char *who)
{
struct Ban *bptr;
bptr = BlockHeapAlloc(ban_heap);
DupNString(bptr->banstr, banstr, BANLEN);
DupNString(bptr->who, who, BANLEN);
DupString(bptr->banstr, banstr);
DupString(bptr->who, who);
return (bptr);
}

View file

@ -22,7 +22,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
* $Id: chmode.c 3534 2007-07-14 13:34:50Z jilles $
* $Id: chmode.c 3580 2007-11-07 23:45:14Z jilles $
*/
#include "stdinc.h"
@ -92,7 +92,7 @@ add_id(struct Client *source_p, struct Channel *chptr, const char *banid,
dlink_list * list, long mode_type)
{
struct Ban *actualBan;
static char who[BANLEN];
static char who[USERHOST_REPLYLEN];
char *realban = LOCAL_COPY(banid);
dlink_node *ptr;
@ -615,8 +615,11 @@ chm_ban(struct Client *source_p, struct Channel *chptr,
else
mask = pretty_mask(raw_mask);
/* we'd have problems parsing this, hyb6 does it too */
if(strlen(mask) > (MODEBUFLEN - 2))
/* we'd have problems parsing this, hyb6 does it too
* also make sure it will always fit on a line with channel
* name etc.
*/
if(strlen(mask) > IRCD_MIN(BANLEN, MODEBUFLEN - 5))
return;
/* if we're adding a NEW id */