From 3a5502362e44e78a32b56d4289dc414b42bfe6ad Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 3 Jun 2010 14:02:46 +0000 Subject: [PATCH] fix valgrind complaint - indeed corner case. SVN revision: 49414 --- .../lib/engines/common/evas_map_image_core.c | 35 ++++++++++++++----- .../engines/common/evas_map_image_internal.c | 2 +- .../lib/engines/common/evas_map_image_loop.c | 10 +++--- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/legacy/evas/src/lib/engines/common/evas_map_image_core.c b/legacy/evas/src/lib/engines/common/evas_map_image_core.c index e18421c7b0..d4788fe4dc 100644 --- a/legacy/evas/src/lib/engines/common/evas_map_image_core.c +++ b/legacy/evas/src/lib/engines/common/evas_map_image_core.c @@ -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 @@ -39,9 +39,19 @@ 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; @@ -113,7 +123,7 @@ 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 @@ -135,12 +145,19 @@ 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 diff --git a/legacy/evas/src/lib/engines/common/evas_map_image_internal.c b/legacy/evas/src/lib/engines/common/evas_map_image_internal.c index 94f129da1f..80265231c7 100644 --- a/legacy/evas/src/lib/engines/common/evas_map_image_internal.c +++ b/legacy/evas/src/lib/engines/common/evas_map_image_internal.c @@ -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 diff --git a/legacy/evas/src/lib/engines/common/evas_map_image_loop.c b/legacy/evas/src/lib/engines/common/evas_map_image_loop.c index aa067e0bd3..3e6c402034 100644 --- a/legacy/evas/src/lib/engines/common/evas_map_image_loop.c +++ b/legacy/evas/src/lib/engines/common/evas_map_image_loop.c @@ -93,10 +93,10 @@ { # 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 @@ -104,12 +104,12 @@ 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--; }