summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2011-12-18 07:29:59 -0500
committerSøren Sandmann Pedersen <ssp@redhat.com>2011-12-21 06:23:08 -0500
commit87e0cf5ef3e804bc7c3e49a9c8054f0eaa1cde6e (patch)
treeffe622783311fce135eb2964f93f1a4260a6e9a0
parent2c8881210a04be0ca1b926aa188f1b20693147e3 (diff)
gradient-walker: For NONE repeats, when x < 0 or x > 1, set both colors to 0
ec7c9c2b6865b48b8bd14e4 introduced a bug where NONE gradients would be misrendered, causing the area outside the gradient to be treated as a long fade to transparent.The problem was that a check for positions outside the gradients were dropped in favor of relying on the sentinels. Aside from misrendering, this also caused a signed integer overflow when the code would compute a stepper size based on MIN_INT32. This patches fixes the issue by reinstating a check for these cases and setting both the right and left colors to transparent black.
-rw-r--r--pixman/pixman-gradient-walker.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/pixman/pixman-gradient-walker.c b/pixman/pixman-gradient-walker.c
index 048039e8..e7e724fa 100644
--- a/pixman/pixman-gradient-walker.c
+++ b/pixman/pixman-gradient-walker.c
@@ -108,6 +108,13 @@ gradient_walker_reset (pixman_gradient_walker_t *walker,
left_x += (pos - x);
right_x += (pos - x);
}
+ else if (walker->repeat == PIXMAN_REPEAT_NONE)
+ {
+ if (n == 0)
+ right_c = left_c;
+ else if (n == count)
+ left_c = right_c;
+ }
walker->left_x = left_x;
walker->right_x = right_x;