diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2014-04-23 20:25:40 -0400 |
---|---|---|
committer | Søren Sandmann <ssp@redhat.com> | 2014-05-15 13:29:58 -0400 |
commit | 9cd283b2eb8279824406bfd47b020d21fc00cf82 (patch) | |
tree | 0b23ee8371b5b98f013820f724d17302a2605fd6 | |
parent | f5f5dbbbc668a3a90c6cfc79bbd2422805db31e7 (diff) |
pixman-gradient-walker: Make left_x and right_x 64 bit variables
The variables left_x, and right_x in gradient_walker_reset() are
computed from pos, which is a 64 bit quantity, so to avoid overflows,
these variables must be 64 bit as well.
Similarly, the left_x and right_x that are stored in
pixman_gradient_walker_t need to be 64 bit as well; otherwise,
pixman_gradient_walker_pixel() will call reset too often.
This fixes the radial-invalid test, which was generating 'invalid'
floating point exceptions when the overflows caused color values to be
outside of [0, 255].
-rw-r--r-- | pixman/pixman-gradient-walker.c | 2 | ||||
-rw-r--r-- | pixman/pixman-private.h | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/pixman/pixman-gradient-walker.c b/pixman/pixman-gradient-walker.c index 5944a55..822f8e6 100644 --- a/pixman/pixman-gradient-walker.c +++ b/pixman/pixman-gradient-walker.c @@ -54,7 +54,7 @@ static void gradient_walker_reset (pixman_gradient_walker_t *walker, pixman_fixed_48_16_t pos) { - int32_t x, left_x, right_x; + int64_t x, left_x, right_x; pixman_color_t *left_c, *right_c; int n, count = walker->num_stops; pixman_gradient_stop_t *stops = walker->stops; diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h index 6ca13b2..fdc966a 100644 --- a/pixman/pixman-private.h +++ b/pixman/pixman-private.h @@ -345,8 +345,8 @@ typedef struct float r_s, r_b; float g_s, g_b; float b_s, b_b; - pixman_fixed_t left_x; - pixman_fixed_t right_x; + pixman_fixed_48_16_t left_x; + pixman_fixed_48_16_t right_x; pixman_gradient_stop_t *stops; int num_stops; |