(svn r11816) -Fix: forgot clearing one byte, causing the passwords to differ slightly on different platforms.
authorrubidium
Sat, 12 Jan 2008 08:34:16 +0000
changeset 8252 69bfb7671f97
parent 8251 886d6a9cefef
child 8253 eec832095805
(svn r11816) -Fix: forgot clearing one byte, causing the passwords to differ slightly on different platforms.
src/network/network_client.cpp
--- a/src/network/network_client.cpp	Fri Jan 11 22:29:47 2008 +0000
+++ b/src/network/network_client.cpp	Sat Jan 12 08:34:16 2008 +0000
@@ -53,17 +53,18 @@
 	memset(salted_password, 0, sizeof(salted_password));
 	snprintf(salted_password, sizeof(salted_password), "%s", password);
 	/* Add the game seed and the server's unique ID as the salt. */
-	for (uint i = 0; i < NETWORK_UNIQUE_ID_LENGTH; i++) salted_password[i] ^= _password_server_unique_id[i] ^ (_password_game_seed >> i);
+	for (uint i = 0; i < NETWORK_UNIQUE_ID_LENGTH - 1; i++) salted_password[i] ^= _password_server_unique_id[i] ^ (_password_game_seed >> i);
 
 	Md5 checksum;
 	uint8 digest[16];
 	static char hashed_password[NETWORK_UNIQUE_ID_LENGTH];
 
 	/* Generate the MD5 hash */
-	checksum.Append((const uint8*)salted_password, sizeof(salted_password));
+	checksum.Append((const uint8*)salted_password, sizeof(salted_password) - 1);
 	checksum.Finish(digest);
 
 	for (int di = 0; di < 16; di++) sprintf(hashed_password + di * 2, "%02x", digest[di]);
+	hashed_password[lengthof(hashed_password) - 1] = '\0';
 
 	return hashed_password;
 }