* Fixed potential crash in IRC processing message with '%' using *printf.

* Fixed memory leaking caused by homun_data not freed when removed.

* Minor adjustments to sign/unsign in script commands.

modified   Changelog-Trunk.txt
modified   src/map/irc.c
modified   src/map/script.c
modified   src/map/unit.c


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9245 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
Lance 2006-11-17 16:48:04 +00:00
parent 617a4d0850
commit 3bfc48996a
4 changed files with 22 additions and 18 deletions

View File

@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/11/17 2006/11/17
* Fixed potential crash in IRC processing message with '%' using *printf. [Lance]
* Fixed memory leaking caused by homun_data not freed when removed. [Lance]
* Fixed client not validating the chat-kick-request packet, which can cause * Fixed client not validating the chat-kick-request packet, which can cause
crashes. [Skotlex] crashes. [Skotlex]
* Updated map_quit to handle removing of players who are not even * Updated map_quit to handle removing of players who are not even

View File

@ -63,9 +63,10 @@ int irc_connect_timer(int tid, unsigned int tick, int id, int data)
void irc_announce(char *buf) void irc_announce(char *buf)
{ {
char send_string[256]; char send_string[256];
malloc_tsetdword(send_string,'\0',256); // malloc_tsetdword(send_string,'\0',256); // NOT REQUIRED
sprintf(send_string,"PRIVMSG %s :%s",irc_channel, buf); sprintf(send_string,"PRIVMSG %s :",irc_channel);
strcat(send_string, buf);
irc_send(send_string); irc_send(send_string);
} }

View File

@ -11988,10 +11988,10 @@ int buildin_setmobdata(struct script_state *st){
md->level = (unsigned short)value2; md->level = (unsigned short)value2;
break; break;
case 2: case 2:
md->status.hp = value2; md->status.hp = (unsigned int)value2;
break; break;
case 3: case 3:
md->status.max_hp = value2; md->status.max_hp = (unsigned int)value2;
break; break;
case 4: case 4:
md->master_id = value2; md->master_id = value2;
@ -12006,49 +12006,49 @@ int buildin_setmobdata(struct script_state *st){
md->bl.y = (short)value2; md->bl.y = (short)value2;
break; break;
case 8: case 8:
md->status.speed = (short)value2; md->status.speed = (unsigned short)value2;
break; break;
case 9: case 9:
md->status.mode = (short)value2; md->status.mode = (unsigned short)value2;
break; break;
case 10: case 10:
md->special_state.ai = (unsigned int)value2; md->special_state.ai = (unsigned int)value2;
break; break;
case 11: case 11:
md->sc.option = (short)value2; md->sc.option = (unsigned short)value2;
break; break;
case 12: case 12:
md->vd->sex = value2; md->vd->sex = (char)value2;
break; break;
case 13: case 13:
md->vd->class_ = value2; md->vd->class_ = (unsigned short)value2;
break; break;
case 14: case 14:
md->vd->hair_style = (short)value2; md->vd->hair_style = (unsigned short)value2;
break; break;
case 15: case 15:
md->vd->hair_color = (short)value2; md->vd->hair_color = (unsigned short)value2;
break; break;
case 16: case 16:
md->vd->head_bottom = (short)value2; md->vd->head_bottom = (unsigned short)value2;
break; break;
case 17: case 17:
md->vd->head_mid = (short)value2; md->vd->head_mid = (unsigned short)value2;
break; break;
case 18: case 18:
md->vd->head_top = (short)value2; md->vd->head_top = (unsigned short)value2;
break; break;
case 19: case 19:
md->vd->cloth_color = (short)value2; md->vd->cloth_color = (unsigned short)value2;
break; break;
case 20: case 20:
md->vd->shield = value2; md->vd->shield = (unsigned short)value2;
break; break;
case 21: case 21:
md->vd->weapon = (short)value2; md->vd->weapon = (unsigned short)value2;
break; break;
case 22: case 22:
md->vd->shield = (short)value2; md->vd->shield = (unsigned short)value2;
break; break;
case 23: case 23:
md->ud.dir = (unsigned char)value2; md->ud.dir = (unsigned char)value2;

View File

@ -1837,6 +1837,7 @@ int unit_free(struct block_list *bl, int clrtype) {
intif_homunculus_requestdelete(hd->homunculus.hom_id); intif_homunculus_requestdelete(hd->homunculus.hom_id);
if (sd) sd->status.hom_id = 0; if (sd) sd->status.hom_id = 0;
} }
aFree(hd); // Remember to free it! [Lance]
if(sd) sd->hd = NULL; if(sd) sd->hd = NULL;
} }