From d530df5b85eb2f796fd51ae1fe3bdce843d9ca00 Mon Sep 17 00:00:00 2001 From: ultramage Date: Wed, 8 Oct 2008 13:15:35 +0000 Subject: Fixed chat_createnpcchat() not checking if a chatroom already exists, producing memleaks in certain situations (bugreport:2325). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13269 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/chat.c | 7 +++++++ src/map/clif.c | 3 ++- src/map/script.c | 5 ++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/map/chat.c b/src/map/chat.c index a466424d4..2572e5083 100644 --- a/src/map/chat.c +++ b/src/map/chat.c @@ -4,6 +4,7 @@ #include "../common/cbasetypes.h" #include "../common/malloc.h" #include "../common/nullpo.h" +#include "../common/showmsg.h" #include "../common/strlib.h" #include "atcommand.h" // msg_txt() #include "battle.h" // struct battle_config @@ -293,6 +294,12 @@ int chat_createnpcchat(struct npc_data* nd, const char* title, int limit, bool p struct chat_data* cd; nullpo_retr(0, nd); + if( nd->chat_id ) + { + ShowError("chat_createnpcchat: npc '%s' already has a chatroom, cannot create new one!\n", nd->exname); + return 0; + } + cd = chat_createchat(&nd->bl, title, "", limit, pub, trigger, ev); if( cd ) { diff --git a/src/map/clif.c b/src/map/clif.c index 120db10f6..3ae69e326 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1328,9 +1328,10 @@ void clif_changemapserver(struct map_session_data* sd, unsigned short map_index, void clif_blown(struct block_list *bl) { //Aegis packets says fixpos, but it's unsure whether slide works better or not. -// return clif_fixpos(bl); +// clif_fixpos(bl); clif_slide(bl, bl->x, bl->y); } + /*========================================== * *------------------------------------------*/ diff --git a/src/map/script.c b/src/map/script.c index ceb0dab50..b7367c8fe 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -8461,8 +8461,11 @@ BUILDIN_FUNC(waitingroom) ev = script_getstr(st, 4); trigger = limit; } - if( (nd=(struct npc_data *)map_id2bl(st->oid)) != NULL ) + + nd = (struct npc_data *)map_id2bl(st->oid); + if( nd != NULL ) chat_createnpcchat(nd, title, limit, pub, trigger, ev); + return 0; } -- cgit v1.2.3-70-g09d2