From b7c868ef795acedc3a00e608ed3858420c5809de Mon Sep 17 00:00:00 2001 From: ai4rei Date: Wed, 29 Dec 2010 01:55:05 +0000 Subject: [PATCH] * Fixed char-server making assumptions about RFIFO data length in character deletion packet (since r10909). * Fixed login-server discarding RFIFO data, when the length is 1 byte; minimum packet size is 2 bytes (since r5027). - Fixed login-server not skipping packet 0x2728's data on failure (since r12043). git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14637 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 3 +++ src/char/char.c | 2 +- src/char_sql/char.c | 2 +- src/login/admin.c | 2 +- src/login/login.c | 6 +----- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 0ca19ac69c..97d9f8ef46 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -1,6 +1,9 @@ Date Added 2010/12/28 + * Fixed char-server making assumptions about RFIFO data length in character deletion packet (since r10909). [Ai4rei] + * Fixed login-server discarding RFIFO data, when the length is 1 byte; minimum packet size is 2 bytes (since r5027). + - Fixed login-server not skipping packet 0x2728's data on failure (since r12043). * Removed unmaintained and broken 'adduser' tool (topic:262284). [Ai4rei] 2010/12/27 * Fixed skill_can_produce_mix not checking, whether or not the produced goods can actually be stored (bugreport:4674). [Ai4rei] diff --git a/src/char/char.c b/src/char/char.c index 6dd131976c..314bfcdaca 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -3550,7 +3550,7 @@ int parse_char(int fd) ShowInfo(CL_RED"Request Char Deletion: "CL_GREEN"%d (%d)"CL_RESET"\n", sd->account_id, cid); memcpy(email, RFIFOP(fd,6), 40); - RFIFOSKIP(fd,RFIFOREST(fd)); // hack to make the other deletion packet work + RFIFOSKIP(fd,( cmd == 0x68 ) ? 46 : 56); if (e_mail_check(email) == 0) safestrncpy(email, "a@a.com", sizeof(email)); // default e-mail diff --git a/src/char_sql/char.c b/src/char_sql/char.c index 46b645ce68..1c190c72e4 100644 --- a/src/char_sql/char.c +++ b/src/char_sql/char.c @@ -3256,7 +3256,7 @@ int parse_char(int fd) ShowInfo(CL_RED"Request Char Deletion: "CL_GREEN"%d (%d)"CL_RESET"\n", sd->account_id, cid); memcpy(email, RFIFOP(fd,6), 40); - RFIFOSKIP(fd,RFIFOREST(fd)); // hack to make the other deletion packet work + RFIFOSKIP(fd,( cmd == 0x68) ? 46 : 56); // Check if e-mail is correct if(strcmpi(email, sd->email) && //email does not matches and diff --git a/src/login/admin.c b/src/login/admin.c index d5175dca5c..1e2e851ace 100644 --- a/src/login/admin.c +++ b/src/login/admin.c @@ -852,6 +852,6 @@ int parse_admin(int fd) return 0; } } - RFIFOSKIP(fd,RFIFOREST(fd)); + return 0; } diff --git a/src/login/login.c b/src/login/login.c index 6b3a1bcaf8..158ba51504 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -524,8 +524,6 @@ int parse_fromchar(int fd) break; case 0x2719: // ping request from charserver - if( RFIFOREST(fd) < 2 ) - return 0; RFIFOSKIP(fd,2); WFIFOHEAD(fd,2); @@ -733,8 +731,8 @@ int parse_fromchar(int fd) // Sending information towards the other char-servers. RFIFOW(fd,0) = 0x2729;// reusing read buffer charif_sendallwos(fd, RFIFOP(fd,0), RFIFOW(fd,2)); - RFIFOSKIP(fd,RFIFOW(fd,2)); } + RFIFOSKIP(fd,RFIFOW(fd,2)); } break; @@ -854,7 +852,6 @@ int parse_fromchar(int fd) } // switch } // while - RFIFOSKIP(fd,RFIFOREST(fd)); return 0; } @@ -1465,7 +1462,6 @@ int parse_login(int fd) } } - RFIFOSKIP(fd,RFIFOREST(fd)); return 0; }