Browse Source

Corrected the chat system to allow 8-letter passwords

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9772 54d463be-8e91-2dee-dedb-b68131a5f0ec
ultramage 18 years ago
parent
commit
936937bd46
3 changed files with 10 additions and 10 deletions
  1. 1 0
      Changelog-Trunk.txt
  2. 7 8
      src/map/chat.c
  3. 2 2
      src/map/map.h

+ 1 - 0
Changelog-Trunk.txt

@@ -4,6 +4,7 @@ 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.
 
 2007/02/01
+	* Corrected the chat system to allow 8-letter passwords
 	* Minor details (pdb file location, improved debug, npc typo)
 	* Cleaned up the npcshop(add/del)item script commands, fixed a possible
 	  dangling pointer crash caused by their improper use of realloc. They no

+ 7 - 8
src/map/chat.c

@@ -17,10 +17,10 @@
 int chat_triggerevent(struct chat_data *cd);
 
 /*==========================================
- * チャットルーム作成
+ * chatroom creation
  *------------------------------------------
  */
-int chat_createchat(struct map_session_data *sd,int limit,int pub,char* pass,char* title,int titlelen)
+int chat_createchat(struct map_session_data* sd,int limit, int pub, char* pass, char* title, int titlelen)
 {
 	struct chat_data *cd;
 
@@ -39,11 +39,10 @@ int chat_createchat(struct map_session_data *sd,int limit,int pub,char* pass,cha
 	cd->limit = limit;
 	cd->pub = pub;
 	cd->users = 1;
-	memcpy(cd->pass,pass,8);
-	cd->pass[7]= '\0'; //Overflow check... [Skotlex]
-	if(titlelen>=sizeof(cd->title)-1) titlelen=sizeof(cd->title)-1;
-	memcpy(cd->title,title,titlelen);
-	cd->title[titlelen]=0;
+	titlelen = cap_value(titlelen, 0, sizeof(cd->title)-1); // empty string achievable by using custom client
+	// the following two input strings aren't zero terminated, have to handle it manually
+	memcpy(cd->pass, pass, 8); cd->pass[8]= '\0';
+	memcpy(cd->title, title, titlelen);	cd->title[titlelen] = '\0';
 
 	cd->owner = (struct block_list **)(&cd->usersd[0]);
 	cd->usersd[0] = sd;
@@ -70,7 +69,7 @@ int chat_createchat(struct map_session_data *sd,int limit,int pub,char* pass,cha
  * 既存チャットルームに参加
  *------------------------------------------
  */
-int chat_joinchat (struct map_session_data *sd, int chatid, char* pass)
+int chat_joinchat(struct map_session_data* sd, int chatid, char* pass)
 {
 	struct chat_data *cd;
 

+ 2 - 2
src/map/map.h

@@ -1273,8 +1273,8 @@ enum {
 struct chat_data {
 	struct block_list bl;
 
-	unsigned char pass[8];   /* password */
-	unsigned char title[61]; /* room title MAX 60 */
+	unsigned char pass[8+1];   /* password */
+	unsigned char title[60+1]; /* room title */
 	unsigned char limit;     /* join limit */
 	unsigned char trigger;
 	unsigned char users;     /* current users */