(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
--- a/newgrf.c Thu Aug 31 22:07:49 2006 +0000
+++ b/newgrf.c Fri Sep 01 02:56:02 2006 +0000
@@ -1090,10 +1090,11 @@
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 @@
}
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 @@
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 @@
}
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;
--- a/newgrf_text.c Thu Aug 31 22:07:49 2006 +0000
+++ b/newgrf_text.c Fri Sep 01 02:56:02 2006 +0000
@@ -204,6 +204,9 @@
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.