From ed727f9a64965e41e9c04ef5ec10752400369f81 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sat, 12 Jan 2008 08:34:16 +0000 Subject: (svn r11816) -Fix: forgot clearing one byte, causing the passwords to differ slightly on different platforms. --- src/network/network_client.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 8c3b91b0c..0691cfabc 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -53,17 +53,18 @@ static const char *GenerateCompanyPasswordHash(const char *password) 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; } -- cgit v1.2.3-70-g09d2