(svn r6884) -Codechange: Add strict bounds checking in string formatting system.

The last parameter should point to the end of the buffer (eg lastof(buf))
 Courtesy of Tron.
This commit is contained in:
Darkvater
2006-10-21 23:31:34 +00:00
parent 7f36a980c7
commit ee27bb497c
33 changed files with 240 additions and 231 deletions

View File

@@ -1181,36 +1181,36 @@ static Window *PopupClientList(Window *w, int client_no, int x, int y)
i = 0;
if (_network_own_client_index != ci->client_index) {
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT);
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT, lastof(_clientlist_action[i]));
_clientlist_proc[i++] = &ClientList_SpeakToClient;
}
if (IsValidPlayer(ci->client_playas)) {
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY);
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY, lastof(_clientlist_action[i]));
_clientlist_proc[i++] = &ClientList_SpeakToCompany;
}
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL);
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL, lastof(_clientlist_action[i]));
_clientlist_proc[i++] = &ClientList_SpeakToAll;
if (_network_own_client_index != ci->client_index) {
/* We are no spectator and the player we want to give money to is no spectator */
if (IsValidPlayer(_network_playas) && IsValidPlayer(ci->client_playas)) {
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_GIVE_MONEY);
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_GIVE_MONEY, lastof(_clientlist_action[i]));
_clientlist_proc[i++] = &ClientList_GiveMoney;
}
}
// A server can kick clients (but not himself)
if (_network_server && _network_own_client_index != ci->client_index) {
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_KICK);
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_KICK, lastof(_clientlist_action[i]));
_clientlist_proc[i++] = &ClientList_Kick;
sprintf(_clientlist_action[i],"Ban");
sprintf(_clientlist_action[i],"Ban"); // XXX GetString?
_clientlist_proc[i++] = &ClientList_Ban;
}
if (i == 0) {
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_NONE);
GetString(_clientlist_action[i], STR_NETWORK_CLIENTLIST_NONE, lastof(_clientlist_action[i]));
_clientlist_proc[i++] = &ClientList_None;
}
@@ -1511,7 +1511,7 @@ static const char *ChatTabCompletionNextItem(uint *item)
FOR_ALL_TOWNS_FROM(t, *item - MAX_CLIENT_INFO) {
/* Get the town-name via the string-system */
SetDParam(0, t->townnameparts);
GetString(chat_tab_temp_buffer, t->townnametype);
GetString(chat_tab_temp_buffer, t->townnametype, lastof(chat_tab_temp_buffer));
return &chat_tab_temp_buffer[0];
}
}