summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbelugas <belugas@openttd.org>2006-09-01 02:56:02 +0000
committerbelugas <belugas@openttd.org>2006-09-01 02:56:02 +0000
commitc05c81f35c70a95d4d528bdbc8da391b244da065 (patch)
tree14098c80266973a12af61bffed78d4012ee022fc
parent718c0214bf69540326268bd03d9cd7e31a311ad4 (diff)
downloadopenttd-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.c18
-rw-r--r--newgrf_text.c3
2 files changed, 13 insertions, 8 deletions
diff --git a/newgrf.c b/newgrf.c
index c1fa4bc82..be151521b 100644
--- a/newgrf.c
+++ b/newgrf.c
@@ -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.