jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=eb1c452156641cdc14a5ba50b8cf661641baf736

commit eb1c452156641cdc14a5ba50b8cf661641baf736
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Fri Feb 14 11:23:04 2014 +0900

    Evas filters: Prevent division by zero
    
    These can not happen, as all weights > 0.
    Add a CRI message in case of div0.
    Fixes CID 1174081, CID 1174080.
---
 src/lib/evas/filters/evas_filter_blur.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/lib/evas/filters/evas_filter_blur.c 
b/src/lib/evas/filters/evas_filter_blur.c
index b6ae304..07b095a 100644
--- a/src/lib/evas/filters/evas_filter_blur.c
+++ b/src/lib/evas/filters/evas_filter_blur.c
@@ -452,6 +452,7 @@ _gaussian_blur_step_alpha(DATA8 *src, DATA8 *dst, int 
radius, int len, int step,
              acc += (*s) * weights[j + radius - k];
              divider += weights[j + radius - k];
           }
+        if (!divider) goto div_zero;
         *dst = acc / divider;
      }
 
@@ -476,8 +477,14 @@ _gaussian_blur_step_alpha(DATA8 *src, DATA8 *dst, int 
radius, int len, int step,
              acc += (*s) * weights[j];
              divider += weights[j];
           }
+        if (!divider) goto div_zero;
         *dst = acc / divider;
      }
+
+   return;
+
+div_zero:
+   CRI("Division by zero avoided! Something is very wrong here!");
 }
 
 static void
@@ -504,6 +511,7 @@ _gaussian_blur_step_rgba(DATA32 *src, DATA32 *dst, int 
radius, int len, int step
              acc[BLUE]  += B_VAL(s) * weights[weightidx];
              divider += weights[weightidx];
           }
+        if (!divider) goto div_zero;
         A_VAL(dst) = acc[ALPHA] / divider;
         R_VAL(dst) = acc[RED]   / divider;
         G_VAL(dst) = acc[GREEN] / divider;
@@ -542,11 +550,17 @@ _gaussian_blur_step_rgba(DATA32 *src, DATA32 *dst, int 
radius, int len, int step
              acc[BLUE]  += B_VAL(s) * weights[j];
              divider += weights[j];
           }
+        if (!divider) goto div_zero;
         A_VAL(dst) = acc[ALPHA] / divider;
         R_VAL(dst) = acc[RED]   / divider;
         G_VAL(dst) = acc[GREEN] / divider;
         B_VAL(dst) = acc[BLUE]  / divider;
      }
+
+   return;
+
+div_zero:
+   CRI("Division by zero avoided! Something is very wrong here!");
 }
 
 static void

-- 


Reply via email to