(svn r6289) -Fix(r6108) : case 0x48 (generic text) should not have been set over newstations.
authorbelugas
Fri, 01 Sep 2006 02:56:02 +0000
changeset 4504 1c238774d1b0
parent 4503 f12995d09734
child 4505 abb08e94a1ea
(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
newgrf.c
newgrf_text.c
--- 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.