summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorglx <glx@openttd.org>2008-02-17 00:47:39 +0000
committerglx <glx@openttd.org>2008-02-17 00:47:39 +0000
commit16e23a75febeb32efad491c4916315ef9cfd73d4 (patch)
treed93500a9b436f5f89350f8c5caff7ed4eef447fc /src
parent7394b9d030a7841c4bf9ee5b77b3b33af8cbe002 (diff)
downloadopenttd-16e23a75febeb32efad491c4916315ef9cfd73d4.tar.xz
(svn r12165) -Fix [FS#1652, FS#1773]: buffer overflow when drawing scrolling news
Diffstat (limited to 'src')
-rw-r--r--src/main_gui.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/main_gui.cpp b/src/main_gui.cpp
index 5b443da8f..f02de6299 100644
--- a/src/main_gui.cpp
+++ b/src/main_gui.cpp
@@ -1668,7 +1668,7 @@ static bool DrawScrollingStatusText(const NewsItem *ni, int pos, int width)
{
char buf[512];
StringID str;
- const char *s;
+ const char *s, *last;
char *d;
DrawPixelInfo tmp_dpi, *old_dpi;
int x;
@@ -1685,19 +1685,22 @@ static bool DrawScrollingStatusText(const NewsItem *ni, int pos, int width)
s = buf;
d = buffer;
+ last = lastof(buffer);
for (;;) {
WChar c = Utf8Consume(&s);
if (c == 0) {
- *d = '\0';
break;
- } else if (*s == 0x0D) {
+ } else if (c == 0x0D) {
+ if (d + 4 >= last) break;
d[0] = d[1] = d[2] = d[3] = ' ';
d += 4;
} else if (IsPrintable(c)) {
+ if (d + Utf8CharLen(c) >= last) break;
d += Utf8Encode(d, c);
}
}
+ *d = '\0';
if (!FillDrawPixelInfo(&tmp_dpi, 141, 1, width, 11)) return true;