Strictly speaking this is not correct, as the value itself can be signed
based on the definition of pixman_fixed_t. At the same time we check if
vx can be negative in some places, while in others we directly ">> 16"
and use the result as an index.

Obviously something isn't right here - should we add more checks,
convert to unsigned or there is something which implies that in some
codepaths the variable cannot be negative ?
---

Noticed while looking at the crashes due to previous commit.

---

 pixman/pixman-sse2.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
index 8955103..67eed84 100644
--- a/pixman/pixman-sse2.c
+++ b/pixman/pixman-sse2.c
@@ -5698,8 +5698,8 @@ scaled_bilinear_scanline_sse2_8888_8888_SRC (uint32_t *   
    dst,
                                             pixman_fixed_t   max_vx,
                                             pixman_bool_t    zero_src)
 {
-    intptr_t vx = vx_;
-    intptr_t unit_x = unit_x_;
+    uintptr_t vx = vx_;
+    uintptr_t unit_x = unit_x_;
     BILINEAR_DECLARE_VARIABLES;
     uint32_t pix1, pix2;
 
@@ -5763,8 +5763,8 @@ scaled_bilinear_scanline_sse2_x888_8888_SRC (uint32_t *   
    dst,
                                             pixman_fixed_t   max_vx,
                                             pixman_bool_t    zero_src)
 {
-    intptr_t vx = vx_;
-    intptr_t unit_x = unit_x_;
+    uintptr_t vx = vx_;
+    uintptr_t unit_x = unit_x_;
     BILINEAR_DECLARE_VARIABLES;
     uint32_t pix1, pix2;
 
@@ -5823,8 +5823,8 @@ scaled_bilinear_scanline_sse2_8888_8888_OVER (uint32_t *  
     dst,
                                              pixman_fixed_t   max_vx,
                                              pixman_bool_t    zero_src)
 {
-    intptr_t vx = vx_;
-    intptr_t unit_x = unit_x_;
+    uintptr_t vx = vx_;
+    uintptr_t unit_x = unit_x_;
     BILINEAR_DECLARE_VARIABLES;
     uint32_t pix1, pix2;
 
@@ -5920,8 +5920,8 @@ scaled_bilinear_scanline_sse2_8888_8_8888_OVER (uint32_t 
*       dst,
                                                pixman_fixed_t   max_vx,
                                                pixman_bool_t    zero_src)
 {
-    intptr_t vx = vx_;
-    intptr_t unit_x = unit_x_;
+    uintptr_t vx = vx_;
+    uintptr_t unit_x = unit_x_;
     BILINEAR_DECLARE_VARIABLES;
     uint32_t pix1, pix2;
     uint32_t m;
@@ -6078,8 +6078,8 @@ scaled_bilinear_scanline_sse2_8888_n_8888_OVER (uint32_t 
*       dst,
                                                pixman_fixed_t   max_vx,
                                                pixman_bool_t    zero_src)
 {
-    intptr_t vx = vx_;
-    intptr_t unit_x = unit_x_;
+    uintptr_t vx = vx_;
+    uintptr_t unit_x = unit_x_;
     BILINEAR_DECLARE_VARIABLES;
     uint32_t pix1;
     __m128i xmm_mask;
-- 
2.8.0

_______________________________________________
Pixman mailing list
Pixman@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/pixman

Reply via email to