filter: handle malloc failers without crashing.
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 20 Apr 2011 08:28:40 +0000 (08:28 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 20 Apr 2011 08:28:40 +0000 (08:28 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@58752 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/canvas/evas_filter.c
src/lib/canvas/evas_object_image.c

index d39e581..82ae342 100644 (file)
@@ -75,8 +75,7 @@ struct filterinfo filterinfo[] =
    /* None */
    { NULL, 0, NULL, NULL, EINA_FALSE},
    /* Blur */
-   { gaussian_filter, sizeof(Evas_Filter_Info_Blur), blur_size_get,
-         gaussian_key_get, EINA_TRUE },
+   { gaussian_filter, sizeof(Evas_Filter_Info_Blur), blur_size_get, gaussian_key_get, EINA_TRUE },
    /* Negation */
    { negation_filter, 0, NULL, NULL, EINA_FALSE },
    /* Sepia */
@@ -442,6 +441,7 @@ evas_filter_key_get(const Evas_Filter_Info *info, uint32_t *lenp)
    
    len = 1 + finfo->datasize;
    key = malloc(len);
+   if (!key) return NULL;
    if (finfo->datasize) memcpy(key, info->data, finfo->datasize);
    key[finfo->datasize] = info->filter;
    return key;
@@ -526,8 +526,8 @@ gaussian_key_get(const Evas_Filter_Info *info, uint32_t *lenp)
    blur = info->data;
 
    if (lenp) *lenp = 4;
-   // FIXME: handle malloc fail
    key = malloc(4);
+   if (!key) return NULL;
    key[0] = EVAS_FILTER_BLUR;
    key[1] = blur->quality * 255;
    key[2] = blur->radius >> 8;
index e4a7e1d..326f056 100644 (file)
@@ -2446,16 +2446,21 @@ evas_object_image_render(Evas_Object *obj, void *output, void *context, void *su
                   uint8_t *key;
 
                   if (obj->filter->key) free(obj->filter->key);
+                  obj->filter->key = NULL;
+                  obj->filter->len = 0;
                   key = evas_filter_key_get(obj->filter, &len);
-                  obj->filter->key = key;
-                  obj->filter->len = len;
-                  fi = obj->layer->evas->engine.func->image_filtered_get
-                  (o->engine_data, key, len);
-                  if (obj->filter->cached && fi != obj->filter->cached)
+                  if (key)
                     {
-                       obj->layer->evas->engine.func->image_filtered_free
-                       (o->engine_data, obj->filter->cached);
-                       obj->filter->cached = NULL;
+                       obj->filter->key = key;
+                       obj->filter->len = len;
+                       fi = obj->layer->evas->engine.func->image_filtered_get
+                          (o->engine_data, key, len);
+                       if (obj->filter->cached && fi != obj->filter->cached)
+                         {
+                            obj->layer->evas->engine.func->image_filtered_free
+                               (o->engine_data, obj->filter->cached);
+                            obj->filter->cached = NULL;
+                         }
                     }
                }
              else if (obj->filter->cached)