Mercurial > hg > openttd
changeset 9932:3cf7ca9f3281 draft
(svn r14087) -Fix [FS#2228]: flawed parsing of words (as in 2 bytes) in GRF strings due to sign extension (minime)
author | rubidium <rubidium@openttd.org> |
---|---|
date | Sat, 16 Aug 2008 21:48:28 +0000 |
parents | 3ed3b1a0c1b3 |
children | 7464538b6daa |
files | src/newgrf_text.cpp |
diffstat | 1 files changed, 16 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -239,8 +239,8 @@ 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 @@ 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;