summaryrefslogtreecommitdiff
path: root/viewport.c
diff options
context:
space:
mode:
authorludde <ludde@openttd.org>2005-07-17 18:36:47 +0000
committerludde <ludde@openttd.org>2005-07-17 18:36:47 +0000
commit3eee2b7b7c072b567d0a41f9a8ea56d208c98f6b (patch)
treef4cb4e53bd440b35708dd6dbcc61089345ded3ea /viewport.c
parentbaccddb461f4d71a4c71c408d1d418637bbefbdb (diff)
downloadopenttd-3eee2b7b7c072b567d0a41f9a8ea56d208c98f6b.tar.xz
(svn r2619) Fix: [viewport] Fix potential buffer overflow reported by Tron
Diffstat (limited to 'viewport.c')
-rw-r--r--viewport.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/viewport.c b/viewport.c
index 3cb0bda0e..7e1f23173 100644
--- a/viewport.c
+++ b/viewport.c
@@ -61,6 +61,10 @@ typedef struct ParentSpriteToDraw {
byte tile_z_bottom;
} ParentSpriteToDraw;
+// Quick hack to know how much memory to reserve when allocating from the spritelist
+// to prevent a buffer overflow.
+#define LARGEST_SPRITELIST_STRUCT ParentSpriteToDraw
+
typedef struct ViewportDrawer {
DrawPixelInfo dpi;
@@ -1236,7 +1240,7 @@ void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom
vd.parent_list = parent_list;
vd.eof_parent_list = &parent_list[lengthof(parent_list)];
vd.spritelist_mem = mem;
- vd.eof_spritelist_mem = &mem[sizeof(mem) - 0x40];
+ vd.eof_spritelist_mem = &mem[sizeof(mem) - sizeof(LARGEST_SPRITELIST_STRUCT)];
vd.last_string = &vd.first_string;
vd.first_string = NULL;
vd.last_tile = &vd.first_tile;