Changeset - r9932:726a31405883
[Not reviewed]
master
0 1 0
rubidium - 16 years ago 2008-08-16 21:48:28
rubidium@openttd.org
(svn r14087) -Fix [FS#2228]: flawed parsing of words (as in 2 bytes) in GRF strings due to sign extension (minime)
1 file changed with 16 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/newgrf_text.cpp
Show inline comments
 
@@ -239,8 +239,8 @@ char *TranslateTTDPatchCodes(uint32 grfi
 
			case 0x80: d += Utf8Encode(d, SCC_NEWGRF_PRINT_DWORD + c - 0x7B); break;
 
			case 0x81: {
 
				StringID string;
 
				string  = *str++;
 
				string |= *str++ << 8;
 
				string  = ((uint8)*str++);
 
				string |= ((uint8)*str++) << 8;
 
				d += Utf8Encode(d, SCC_STRING_ID);
 
				d += Utf8Encode(d, MapGRFStringID(grfid, string));
 
				break;
 
@@ -271,14 +271,22 @@ char *TranslateTTDPatchCodes(uint32 grfi
 
			case 0x9A:
 
				switch (*str++) {
 
					case 0: /* FALL THROUGH */
 
					case 1: d += Utf8Encode(d, SCC_NEWGRF_PRINT_QWORD_CURRENCY); break;
 
					case 1:
 
						d += Utf8Encode(d, SCC_NEWGRF_PRINT_QWORD_CURRENCY);
 
						break;
 
					case 3: {
 
						uint16 tmp = *str++;
 
						tmp |= (*str++) << 8;
 
						d += Utf8Encode(d, SCC_NEWGRF_PUSH_WORD); d += Utf8Encode(d, tmp);
 
						uint16 tmp  = ((uint8)*str++);
 
						tmp        |= ((uint8)*str++) << 8;
 
						d += Utf8Encode(d, SCC_NEWGRF_PUSH_WORD);
 
						d += Utf8Encode(d, tmp);
 
					} break;
 
					case 4: d += Utf8Encode(d, SCC_NEWGRF_UNPRINT); d += Utf8Encode(d, *str++); break;
 
					default: grfmsg(1, "missing handler for extended format code"); break;
 
					case 4:
 
						d += Utf8Encode(d, SCC_NEWGRF_UNPRINT);
 
						d += Utf8Encode(d, *str++);
 
						break;
 
					default:
 
						grfmsg(1, "missing handler for extended format code");
 
						break;
 
				}
 
				break;
 

	
0 comments (0 inline, 0 general)