mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r17611) -Fix: buffers used for verifying company and president name length were too short, possibly causing false positives
This commit is contained in:
parent
3a7da30922
commit
665864e5b0
|
@ -260,7 +260,9 @@ static void GenerateCompanyName(Company *c)
|
||||||
StringID str;
|
StringID str;
|
||||||
Company *cc;
|
Company *cc;
|
||||||
uint32 strp;
|
uint32 strp;
|
||||||
char buffer[100];
|
/* Reserve space for extra unicode character. We need to do this to be able
|
||||||
|
* to detect too long company name. */
|
||||||
|
char buffer[MAX_LENGTH_COMPANY_NAME_BYTES + MAX_CHAR_LENGTH];
|
||||||
|
|
||||||
if (c->name_1 != STR_SV_UNNAMED) return;
|
if (c->name_1 != STR_SV_UNNAMED) return;
|
||||||
|
|
||||||
|
@ -392,7 +394,9 @@ restart:;
|
||||||
c->president_name_2 = Random();
|
c->president_name_2 = Random();
|
||||||
c->president_name_1 = SPECSTR_PRESIDENT_NAME;
|
c->president_name_1 = SPECSTR_PRESIDENT_NAME;
|
||||||
|
|
||||||
char buffer[MAX_LENGTH_PRESIDENT_NAME_BYTES + 1];
|
/* Reserve space for extra unicode character. We need to do this to be able
|
||||||
|
* to detect too long president name. */
|
||||||
|
char buffer[MAX_LENGTH_PRESIDENT_NAME_BYTES + MAX_CHAR_LENGTH];
|
||||||
SetDParam(0, c->index);
|
SetDParam(0, c->index);
|
||||||
GetString(buffer, STR_PRESIDENT_NAME, lastof(buffer));
|
GetString(buffer, STR_PRESIDENT_NAME, lastof(buffer));
|
||||||
if (strlen(buffer) >= MAX_LENGTH_PRESIDENT_NAME_BYTES) continue;
|
if (strlen(buffer) >= MAX_LENGTH_PRESIDENT_NAME_BYTES) continue;
|
||||||
|
@ -400,7 +404,8 @@ restart:;
|
||||||
Company *cc;
|
Company *cc;
|
||||||
FOR_ALL_COMPANIES(cc) {
|
FOR_ALL_COMPANIES(cc) {
|
||||||
if (c != cc) {
|
if (c != cc) {
|
||||||
char buffer2[MAX_LENGTH_PRESIDENT_NAME_BYTES + 2];
|
/* Reserve extra space so even overlength president names can be compared. */
|
||||||
|
char buffer2[MAX_LENGTH_PRESIDENT_NAME_BYTES + MAX_CHAR_LENGTH];
|
||||||
SetDParam(0, cc->index);
|
SetDParam(0, cc->index);
|
||||||
GetString(buffer2, STR_PRESIDENT_NAME, lastof(buffer2));
|
GetString(buffer2, STR_PRESIDENT_NAME, lastof(buffer2));
|
||||||
if (strcmp(buffer2, buffer) == 0) goto restart;
|
if (strcmp(buffer2, buffer) == 0) goto restart;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
*/
|
*/
|
||||||
typedef uint16 StringID;
|
typedef uint16 StringID;
|
||||||
static const StringID INVALID_STRING_ID = 0xFFFF; ///< Constant representing an invalid string
|
static const StringID INVALID_STRING_ID = 0xFFFF; ///< Constant representing an invalid string
|
||||||
|
static const int MAX_CHAR_LENGTH = 4; ///< Max. length of UTF-8 encoded unicode character
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MAX_LANG = 64, ///< Maximal number of languages supported by the game
|
MAX_LANG = 64, ///< Maximal number of languages supported by the game
|
||||||
|
|
|
@ -1419,9 +1419,10 @@ struct TownNameParams {
|
||||||
*/
|
*/
|
||||||
static bool VerifyTownName(uint32 r, const TownNameParams *par)
|
static bool VerifyTownName(uint32 r, const TownNameParams *par)
|
||||||
{
|
{
|
||||||
/* reserve space for extra unicode character and terminating '\0' */
|
/* Reserve space for extra unicode character. We need to do this to be able
|
||||||
char buf1[MAX_LENGTH_TOWN_NAME_BYTES + 4 + 1];
|
* to detect too long town name. */
|
||||||
char buf2[MAX_LENGTH_TOWN_NAME_BYTES + 4 + 1];
|
char buf1[MAX_LENGTH_TOWN_NAME_BYTES + MAX_CHAR_LENGTH];
|
||||||
|
char buf2[MAX_LENGTH_TOWN_NAME_BYTES + MAX_CHAR_LENGTH];
|
||||||
|
|
||||||
SetDParam(0, r);
|
SetDParam(0, r);
|
||||||
if (par->grf && par->grfid != 0) {
|
if (par->grf && par->grfid != 0) {
|
||||||
|
|
Loading…
Reference in New Issue