]> git.pond.sub.org Git - empserver/commitdiff
Fix XNORM() and YNORM() hvy-metal-2.2
authorMarkus Armbruster <armbru@pond.sub.org>
Mon, 12 May 2008 16:45:11 +0000 (18:45 +0200)
committerMarkus Armbruster <armbru@pike.pond.sub.org>
Mon, 12 May 2008 16:45:58 +0000 (18:45 +0200)
Broken in commit 5f764285 (v4.3.12) for negative multiples of WORLD_X
and WORLD_Y, respectively.

This could theoretically lead to buffer overruns and other
unpleasantness.  None have been reproduced, though.
(cherry picked from commit 7680acc39fd63684c6854f27e99a2a5e18712473)

include/xy.h

index 9f1f06c216fc4da8c018fe42bd57d3868916293f..574c1b679fb6a06bbb01bcd9387b430f264ab244 100644 (file)
@@ -43,9 +43,9 @@
 #define XYOFFSET(x, y) (((y) * WORLD_X + (x)) / 2)
 
 #define XNORM(x) \
-    (((x) < 0) ? (WORLD_X - (-(x) % WORLD_X)) : ((x) % WORLD_X))
+    (((x) < 0) ? (WORLD_X - 1 - ((-(x) - 1) % WORLD_X)) : ((x) % WORLD_X))
 #define YNORM(y) \
-    (((y) < 0) ? (WORLD_Y - (-(y) % WORLD_Y)) : ((y) % WORLD_Y))
+    (((y) < 0) ? (WORLD_Y - 1 - ((-(y) - 1) % WORLD_Y)) : ((y) % WORLD_Y))
 
 struct range {
     coord lx;                  /* low-range x,y */