(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

@@ -331,7 +331,7 @@ verify_name:;
if (pp->name_1 == str && pp->name_2 == strp) goto bad_town_name;
}
GetString(buffer, str);
GetString(buffer, str, lastof(buffer));
if (strlen(buffer) >= 32 || GetStringBoundingBox(buffer).width >= 150)
goto bad_town_name;
@@ -438,14 +438,14 @@ restart:;
p->president_name_1 = SPECSTR_PRESIDENT_NAME;
SetDParam(0, p->president_name_2);
GetString(buffer, p->president_name_1);
GetString(buffer, p->president_name_1, lastof(buffer));
if (strlen(buffer) >= 32 || GetStringBoundingBox(buffer).width >= 94)
continue;
FOR_ALL_PLAYERS(pp) {
if (pp->is_active && p != pp) {
SetDParam(0, pp->president_name_2);
GetString(buffer2, pp->president_name_1);
GetString(buffer2, pp->president_name_1, lastof(buffer));
if (strcmp(buffer2, buffer) == 0)
goto restart;
}
@@ -998,7 +998,7 @@ int8 SaveHighScoreValue(const Player *p)
SetDParam(1, p->president_name_2);
SetDParam(2, p->name_1);
SetDParam(3, p->name_2);
GetString(hs[i].company, STR_HIGHSCORE_NAME); // get manager/company name string
GetString(hs[i].company, STR_HIGHSCORE_NAME, lastof(hs[i].company)); // get manager/company name string
hs[i].score = score;
hs[i].title = EndGameGetPerformanceTitleFromValue(score);
return i;
@@ -1043,7 +1043,7 @@ int8 SaveHighScoreValueNetwork(void)
SetDParam(1, pl[i]->president_name_2);
SetDParam(2, pl[i]->name_1);
SetDParam(3, pl[i]->name_2);
GetString(hs->company, STR_HIGHSCORE_NAME); // get manager/company name string
GetString(hs->company, STR_HIGHSCORE_NAME, lastof(hs->company)); // get manager/company name string
hs->score = pl[i]->old_economy[0].performance_history;
hs->title = EndGameGetPerformanceTitleFromValue(hs->score);