diff --git a/legacy/evas/src/lib/canvas/evas_filter.c b/legacy/evas/src/lib/canvas/evas_filter.c index d39e581e94..82ae342146 100644 --- a/legacy/evas/src/lib/canvas/evas_filter.c +++ b/legacy/evas/src/lib/canvas/evas_filter.c @@ -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; diff --git a/legacy/evas/src/lib/canvas/evas_object_image.c b/legacy/evas/src/lib/canvas/evas_object_image.c index e4a7e1dc9c..326f056003 100644 --- a/legacy/evas/src/lib/canvas/evas_object_image.c +++ b/legacy/evas/src/lib/canvas/evas_object_image.c @@ -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)