summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorReilly Grant <reillyeon@qotw.net>2009-07-04 15:06:55 +0200
committerMikael Magnusson <mikachu@gmail.com>2009-07-04 15:14:48 +0200
commit18a2bc6da55f1f065bcffdf1c3229d0f2fc7040c (patch)
tree635169ecf5e6ba16a564514b79dadb2f98f8d574 /render
parent3cd4db67aa430c85af8ac88dc40e9cfa63cc246a (diff)
Fix memory corruption when y2sz is 0.
data is incremented one too many times when y2sz is zero, leading to memory corruption. [ also changed % 2 to & 1 -- Mikael ]
Diffstat (limited to 'render')
-rw-r--r--render/gradient.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/render/gradient.c b/render/gradient.c
index 8b6850f0..60a0a555 100644
--- a/render/gradient.c
+++ b/render/gradient.c
@@ -507,11 +507,11 @@ static void gradient_splitvertical(RrAppearance *a, gint w, gint h)
*/
if (h <= 5) {
y1sz = MAX(h/2, 0);
- y2sz = (h < 3 ? 0 : h % 2);
+ y2sz = (h < 3) ? 0 : (h & 1);
y3sz = MAX(h/2, 1);
}
else {
- y1sz = h/2 - (1 - (h % 2));
+ y1sz = h/2 - (1 - (h & 1));
y2sz = 1;
y3sz = h/2;
}
@@ -534,13 +534,15 @@ static void gradient_splitvertical(RrAppearance *a, gint w, gint h)
}
*data = COLOR(y1);
data += w;
- for (y2 = y2sz-1; y2 > 0; --y2) {
+ if (y2sz) {
+ for (y2 = y2sz-1; y2 > 0; --y2) {
+ *data = COLOR(y2);
+ data += w;
+ NEXT(y2);
+ }
*data = COLOR(y2);
data += w;
- NEXT(y2);
}
- *data = COLOR(y2);
- data += w;
for (y3 = y3sz-1; y3 > 0; --y3) {
*data = COLOR(y3);
data += w;