diff options
author | belugas <belugas@openttd.org> | 2006-09-01 02:56:02 +0000 |
---|---|---|
committer | belugas <belugas@openttd.org> | 2006-09-01 02:56:02 +0000 |
commit | c05c81f35c70a95d4d528bdbc8da391b244da065 (patch) | |
tree | 14098c80266973a12af61bffed78d4012ee022fc | |
parent | 718c0214bf69540326268bd03d9cd7e31a311ad4 (diff) | |
download | openttd-c05c81f35c70a95d4d528bdbc8da391b244da065.tar.xz |
(svn r6289) -Fix(r6108) : case 0x48 (generic text) should not have been set over newstations.
It grabbed everyting. Instead, we are now using ids for that purpose, 0xC9, oxD0, 0xDC (FS#304 by Osai)
- Protect newgrf text from entries of 1 char and fewer
- Protect currency name from an overrun of ids
Thanks to glx
-rw-r--r-- | newgrf.c | 18 | ||||
-rw-r--r-- | newgrf_text.c | 3 |
2 files changed, 13 insertions, 8 deletions
@@ -1090,10 +1090,11 @@ static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, i case 0x0A: // Currency display names FOR_EACH_OBJECT { + uint curidx = gvid + i; StringID newone = GetGRFStringID(_cur_grffile->grfid,grf_load_word(&buf)); - if (newone != STR_UNDEFINED) { - _currency_specs[gvid + i].name = newone; + if ((newone != STR_UNDEFINED) && (curidx < NUM_CURRENCY)) { + _currency_specs[curidx].name = newone; } } break; @@ -1153,7 +1154,7 @@ static bool GlobalVarChangeInfo(uint gvid, int numinfo, int prop, byte **bufp, i } break; - case 0x0F: // Euro introduction datess + case 0x0F: // Euro introduction dates FOR_EACH_OBJECT { uint curidx = gvid +i; Year year_euro = grf_load_word(&buf); @@ -1900,11 +1901,6 @@ static void FeatureNewName(byte *buf, int len) break; } - case 0x48 : { // this will allow things like currencies new strings, and everything else - AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, id); - break; - } - default: switch (GB(id, 8, 8)) { case 0xC4: /* Station class name */ @@ -1924,6 +1920,12 @@ static void FeatureNewName(byte *buf, int len) } break; + case 0xC9: + case 0xD0: + case 0xDC: + AddGRFString(_cur_grffile->grfid, id, lang, new_scheme, name, STR_UNDEFINED); + break; + default: DEBUG(grf, 7) ("FeatureNewName: Unsupported ID (0x%04X)", id); break; diff --git a/newgrf_text.c b/newgrf_text.c index 15a3a27ff..00426767a 100644 --- a/newgrf_text.c +++ b/newgrf_text.c @@ -204,6 +204,9 @@ StringID AddGRFString(uint32 grfid, uint16 stringid, byte langid_to_add, bool ne GRFText *newtext; uint id; + /* We do not allow strings of only one char or even fewer*/ + if (strlen(text_to_add) <= 1) return STR_EMPTY; + /* When working with the old language scheme (grf_version is less than 7) and * English or American is among the set bits, simply add it as English in * the new scheme, i.e. as langid = 1. |