fix valgrind complaint - indeed corner case.
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 3 Jun 2010 14:02:46 +0000 (14:02 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 3 Jun 2010 14:02:46 +0000 (14:02 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@49414 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/engines/common/evas_map_image_core.c
src/lib/engines/common/evas_map_image_internal.c
src/lib/engines/common/evas_map_image_loop.c

index e18421c..d4788fe 100644 (file)
@@ -8,7 +8,7 @@
         for (y = ystart; y <= yend; y++)
           {
              int x, w, ww;
-             FPc u, v, ud, vd, dv;
+             FPc u, v, ud, vd, dv, ue, ve;
              DATA32 *d, *s;
 #ifdef COLMUL             
              FPc cv, cd, cc; // col
                        
                        ww = w;
                        u = span->u[0] << FPI;
+                       if (u < 0) u = 0;
+                       else if (u >= swp) u = swp - 1;
                        v = span->v[0] << FPI;
-                       ud = ((span->u[1] << FPI) - u) / w;
-                       vd = ((span->v[1] << FPI) - v) / w;
+                       if (v < 0) v = 0;
+                       else if (v >= shp) v = shp - 1;
+                       ue = span->u[1] << FPI;
+                       if (ue < 0) ue = 0;
+                       else if (ue >= swp) ue = swp - 1;
+                       ve = span->v[1] << FPI;
+                       if (ve < 0) ve = 0;
+                       else if (ve >= shp) ve = shp - 1;
+                       ud = (ue - u) / w;
+                       vd = (ve - v) / w;
                        tl = (long long)ud * (w << FP);
                        tl = tl / dv;
                        ud = tl;
         for (y = ystart; y <= yend; y++)
           {
              int x, w, ww;
-             FPc u, v, ud, vd;
+             FPc u, v, ud, vd, ue, ve;
              DATA32 *d, *s;
 #ifdef COLMUL
              FPc cv, cd, cc; // col
                        if (w <= 0) continue;
                        ww = w;
                        u = span->u[0] << FPI;
+                       if (u < 0) u = 0;
+                       else if (u >= swp) u = swp - 1;
                        v = span->v[0] << FPI;
-                       ud = ((span->u[1] << FPI) - u) / w;
-                       vd = ((span->v[1] << FPI) - v) / w;
-                       if (ud < 0) u -= 1;
-                       if (vd < 0) v -= 1;
-                       
+                       if (v < 0) v = 0;
+                       else if (v >= shp) v = shp - 1;
+                       ue = span->u[1] << FPI;
+                       if (ue < 0) ue = 0;
+                       else if (ue >= swp) ue = swp - 1;
+                       ve = span->v[1] << FPI;
+                       if (ve < 0) ve = 0;
+                       else if (ve >= shp) ve = shp - 1;
+                       ud = (ue - u) / w;
+                       vd = (ve - v) / w;
                        if (direct)
                          d = dst->image.data + (y * dst->cache_entry.w) + x;
                        else
index 94f129d..8026523 100644 (file)
@@ -106,7 +106,7 @@ FUNC_NAME(RGBA_Image *src, RGBA_Image *dst,
           func = evas_common_gfx_func_composite_pixel_span_get(src, dst, cw, dc->render_op);
         src->cache_entry.flags.alpha = pa;
      }
-   
+    
    if (!havecol)
      {
 #undef COLMUL     
index aa067e0..3e6c402 100644 (file)
      {
 # ifdef COLMUL
         DATA32 val1, cval; // col
-# endif        
+# endif
 # ifdef COLBLACK
         *d = 0xff000000; // col
-# else        
+# else
         s = sp + ((v >> (FP + FPI)) * sw) + 
           (u >> (FP + FPI));
 #  ifdef COLMUL
         cval = INTERP_256((cv >> 16), c2, c1); // col
         *d = MUL4_SYM(cval, val1);
         cv += cd; // col              
-#  else        
+#  else
         *d = *s;
-#  endif        
+#  endif
         u += ud;
         v += vd;
-# endif        
+# endif
         d++;
         ww--;
      }