Mercurial > hg > openttd
changeset 15001:43eedecffc5a draft
(svn r19613) -Fix [FS#3755]: possible invalid read when server moves client to spectators before he finishes joining
author | smatz <smatz@openttd.org> |
---|---|
date | Sun, 11 Apr 2010 22:06:17 +0000 |
parents | c10b7750962f |
children | baf0e12ad2b4 |
files | src/network/network_server.cpp |
diffstat | 1 files changed, 6 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -779,10 +779,12 @@ char password[NETWORK_PASSWORD_LENGTH]; p->Recv_string(password, sizeof(password)); - /* Check company password. Allow joining if we cleared the password meanwhile */ - const NetworkClientInfo *ci = cs->GetInfo(); - if (!StrEmpty(_network_company_states[ci->client_playas].password) && - strcmp(password, _network_company_states[ci->client_playas].password) != 0) { + /* Check company password. Allow joining if we cleared the password meanwhile. + * Also, check the company is still valid - client could be moved to spectators + * in the middle of the authorization process */ + CompanyID playas = cs->GetInfo()->client_playas; + if (Company::IsValidID(playas) && !StrEmpty(_network_company_states[playas].password) && + strcmp(password, _network_company_states[playas].password) != 0) { /* Password is invalid */ return SEND_COMMAND(PACKET_SERVER_ERROR)(cs, NETWORK_ERROR_WRONG_PASSWORD); }