summaryrefslogtreecommitdiff
path: root/src/network/network_client.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2008-01-12 08:34:16 +0000
committerrubidium <rubidium@openttd.org>2008-01-12 08:34:16 +0000
commit07e0e0a1ff0858270e3f72422cb0a25b39077169 (patch)
tree4171f60a3adab72ed474468ca4bca6eecaaf3d2a /src/network/network_client.cpp
parent81b3635c805ad4c6195925f149879bd00d5b3f9a (diff)
downloadopenttd-07e0e0a1ff0858270e3f72422cb0a25b39077169.tar.xz
(svn r11816) -Fix: forgot clearing one byte, causing the passwords to differ slightly on different platforms.
Diffstat (limited to 'src/network/network_client.cpp')
-rw-r--r--src/network/network_client.cpp5
1 files changed, 3 insertions, 2 deletions
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;
}