summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt2
-rw-r--r--src/map/clif.c19
2 files changed, 18 insertions, 3 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 64a892936..a4002a523 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,8 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2009/03/08
+ * Added several mail id checks to prevent a map server crash (bugreport:2837)
2009/03/02
* Blade Stop status no longer prevents item use and equip changing.
* Against non-players, Blade Stop skill will now only activate if the attacker is at most 2 cells away (1 if barehanded).
diff --git a/src/map/clif.c b/src/map/clif.c
index 02d47ad0b..b8127054e 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -11774,6 +11774,10 @@ void clif_Mail_read(struct map_session_data *sd, int mail_id)
void clif_parse_Mail_read(int fd, struct map_session_data *sd)
{
+ int mail_id = RFIFOL(fd,2);
+
+ if( mail_id <= 0 )
+ return;
if( mail_invalid_operation(sd) )
return;
@@ -11785,9 +11789,12 @@ void clif_parse_Mail_read(int fd, struct map_session_data *sd)
*------------------------------------------*/
void clif_parse_Mail_getattach(int fd, struct map_session_data *sd)
{
- int i, mail_id = RFIFOL(fd,2);
+ int mail_id = RFIFOL(fd,2);
+ int i;
bool fail = false;
+ if( mail_id <= 0 )
+ return;
if( mail_invalid_operation(sd) )
return;
@@ -11841,8 +11848,11 @@ void clif_parse_Mail_getattach(int fd, struct map_session_data *sd)
*------------------------------------------*/
void clif_parse_Mail_delete(int fd, struct map_session_data *sd)
{
- int i, mail_id = RFIFOL(fd,2);
+ int mail_id = RFIFOL(fd,2);
+ int i;
+ if( mail_id <= 0 )
+ return;
if( mail_invalid_operation(sd) )
return;
@@ -11866,8 +11876,11 @@ void clif_parse_Mail_delete(int fd, struct map_session_data *sd)
*------------------------------------------*/
void clif_parse_Mail_return(int fd, struct map_session_data *sd)
{
- int i, mail_id = RFIFOL(fd,2);
+ int mail_id = RFIFOL(fd,2);
+ int i;
+ if( mail_id <= 0 )
+ return;
if( mail_invalid_operation(sd) )
return;