From 6f480338d48809f9fd602cd5fe5be3fc875b7a68 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 2 Jul 2008 00:57:26 +0000 Subject: [PATCH] cover up segv where somehow the alpha flag is set in the 16bit engine but the alpha pixel pointer is NULL. couldn't see where that happens, but it's now protected against it. SVN revision: 34968 --- .../common_16/evas_soft16_image_scaled_sampled.c | 15 +++++++++------ .../src/lib/engines/common_16/evas_soft16_main.c | 8 +------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/legacy/evas/src/lib/engines/common_16/evas_soft16_image_scaled_sampled.c b/legacy/evas/src/lib/engines/common_16/evas_soft16_image_scaled_sampled.c index bde92927a8..1a8f5cc179 100644 --- a/legacy/evas/src/lib/engines/common_16/evas_soft16_image_scaled_sampled.c +++ b/legacy/evas/src/lib/engines/common_16/evas_soft16_image_scaled_sampled.c @@ -93,10 +93,11 @@ _soft16_image_draw_scaled_no_mul(Soft16_Image *src, Soft16_Image *dst, int dst_offset, int w, int h, int *offset_x, int *offset_y) { - if (src->cache_entry.flags.alpha && (!dst->cache_entry.flags.alpha)) + if ((src->cache_entry.flags.alpha && src->alpha) && + (!dst->cache_entry.flags.alpha)) _soft16_image_draw_scaled_transp_solid (src, dst, dc, dst_offset, w, h, offset_x, offset_y); - else if ((!src->cache_entry.flags.alpha) && (!dst->cache_entry.flags.alpha)) + else if (!dst->cache_entry.flags.alpha) _soft16_image_draw_scaled_solid_solid (src, dst, dc, dst_offset, w, h, offset_x, offset_y); else @@ -205,10 +206,11 @@ _soft16_image_draw_scaled_mul_alpha(Soft16_Image *src, Soft16_Image *dst, int dst_offset, int w, int h, int *offset_x, int *offset_y, DATA8 a) { - if (src->cache_entry.flags.alpha && (!dst->cache_entry.flags.alpha)) + if ((src->cache_entry.flags.alpha && src->alpha) && + (!dst->cache_entry.flags.alpha)) _soft16_image_draw_scaled_transp_solid_mul_alpha (src, dst, dc, dst_offset, w, h, offset_x, offset_y, a); - else if ((!src->cache_entry.flags.alpha) && (!dst->cache_entry.flags.alpha)) + else if (!dst->cache_entry.flags.alpha) _soft16_image_draw_scaled_solid_solid_mul_alpha (src, dst, dc, dst_offset, w, h, offset_x, offset_y, a); else @@ -387,10 +389,11 @@ _soft16_image_draw_scaled_mul_color(Soft16_Image *src, Soft16_Image *dst, int *offset_x, int *offset_y, DATA8 r, DATA8 g, DATA8 b, DATA8 a) { - if (src->cache_entry.flags.alpha && (!dst->cache_entry.flags.alpha)) + if ((src->cache_entry.flags.alpha && src->alpha) && + (!dst->cache_entry.flags.alpha)) _soft16_image_draw_scaled_transp_solid_mul_color (src, dst, dc, dst_offset, w, h, offset_x, offset_y, r, g, b, a); - else if ((!src->cache_entry.flags.alpha) && (!dst->cache_entry.flags.alpha)) + else if (!dst->cache_entry.flags.alpha) _soft16_image_draw_scaled_solid_solid_mul_color (src, dst, dc, dst_offset, w, h, offset_x, offset_y, r, g, b, a); else diff --git a/legacy/evas/src/lib/engines/common_16/evas_soft16_main.c b/legacy/evas/src/lib/engines/common_16/evas_soft16_main.c index f5a2241f68..cb93d1684b 100644 --- a/legacy/evas/src/lib/engines/common_16/evas_soft16_main.c +++ b/legacy/evas/src/lib/engines/common_16/evas_soft16_main.c @@ -94,16 +94,10 @@ _evas_common_soft16_image_new(void) { Soft16_Image *im; - im = malloc(sizeof (Soft16_Image)); + im = calloc(1, sizeof(Soft16_Image)); if (!im) return NULL; im->stride = -1; - im->pixels = NULL; - im->alpha = NULL; - /* When is have_alpha set ? */ -/* im->flags.have_alpha = 0; */ - im->flags.free_pixels = 0; - im->flags.free_alpha = 0; return (Image_Entry *) im; }