forked from enlightenment/efl
evas - sw render - protect against null pointer surface access
This commit is contained in:
parent
e54416200b
commit
03fccbd543
|
@ -35,6 +35,7 @@ evas_common_blit_rectangle(const RGBA_Image *src, RGBA_Image *dst, int src_x, in
|
||||||
Gfx_Func_Copy func;
|
Gfx_Func_Copy func;
|
||||||
DATA32 *src_ptr, *dst_ptr;
|
DATA32 *src_ptr, *dst_ptr;
|
||||||
|
|
||||||
|
if ((!src->image.data) || (!dst->image.data)) return;
|
||||||
/* clip clip clip */
|
/* clip clip clip */
|
||||||
if (w <= 0) return;
|
if (w <= 0) return;
|
||||||
if (src_x + w > (int)src->cache_entry.w) w = src->cache_entry.w - src_x;
|
if (src_x + w > (int)src->cache_entry.w) w = src->cache_entry.w - src_x;
|
||||||
|
|
|
@ -39,6 +39,7 @@ evas_common_font_rgba_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y,
|
||||||
DATA32 *im;
|
DATA32 *im;
|
||||||
Evas_Glyph *glyph;
|
Evas_Glyph *glyph;
|
||||||
|
|
||||||
|
if (!dst->image.data) return EINA_FALSE;
|
||||||
if (!glyphs) return EINA_FALSE;
|
if (!glyphs) return EINA_FALSE;
|
||||||
if (!glyphs->array) return EINA_FALSE;
|
if (!glyphs->array) return EINA_FALSE;
|
||||||
|
|
||||||
|
|
|
@ -401,7 +401,8 @@ _evas_common_rgba_image_post_surface(Image_Entry *ie)
|
||||||
# ifdef PIXMAN_IMAGE
|
# ifdef PIXMAN_IMAGE
|
||||||
RGBA_Image *im = (RGBA_Image *)ie;
|
RGBA_Image *im = (RGBA_Image *)ie;
|
||||||
int w, h;
|
int w, h;
|
||||||
|
|
||||||
|
if (!im->image.data) return;
|
||||||
if (im->pixman.im) pixman_image_unref(im->pixman.im);
|
if (im->pixman.im) pixman_image_unref(im->pixman.im);
|
||||||
w = ie->allocated.w;
|
w = ie->allocated.w;
|
||||||
h = ie->allocated.h;
|
h = ie->allocated.h;
|
||||||
|
|
|
@ -30,6 +30,7 @@ _evas_draw_point(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y)
|
||||||
{
|
{
|
||||||
RGBA_Gfx_Pt_Func pfunc;
|
RGBA_Gfx_Pt_Func pfunc;
|
||||||
|
|
||||||
|
if (!dst->image.data) return;
|
||||||
if (!IN_RANGE(x, y, dst->cache_entry.w, dst->cache_entry.h))
|
if (!IN_RANGE(x, y, dst->cache_entry.w, dst->cache_entry.h))
|
||||||
return;
|
return;
|
||||||
if ((dc->clip.use) && (!IN_RECT(x, y, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h)))
|
if ((dc->clip.use) && (!IN_RECT(x, y, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h)))
|
||||||
|
@ -60,6 +61,7 @@ evas_common_line_point_draw(RGBA_Image *dst, int clip_x, int clip_y, int clip_w,
|
||||||
Eina_Bool no_cuse;
|
Eina_Bool no_cuse;
|
||||||
RGBA_Gfx_Pt_Func pfunc;
|
RGBA_Gfx_Pt_Func pfunc;
|
||||||
|
|
||||||
|
if (!dst->image.data) return;
|
||||||
no_cuse = ((clip_x == 0) && (clip_y == 0) &&
|
no_cuse = ((clip_x == 0) && (clip_y == 0) &&
|
||||||
((clip_w == (int)dst->cache_entry.w) &&
|
((clip_w == (int)dst->cache_entry.w) &&
|
||||||
(clip_h == (int)dst->cache_entry.h)));
|
(clip_h == (int)dst->cache_entry.h)));
|
||||||
|
|
|
@ -784,7 +784,7 @@ evas_common_map_rgba_cb(RGBA_Image *src, RGBA_Image *dst,
|
||||||
}
|
}
|
||||||
|
|
||||||
evas_common_image_colorspace_normalize(src);
|
evas_common_image_colorspace_normalize(src);
|
||||||
if (!src->image.data) return;
|
if ((!src->image.data) || (!dst->image.data)) return;
|
||||||
|
|
||||||
if ((!dc->cutout.rects) && (!dc->clip.use))
|
if ((!dc->cutout.rects) && (!dc->clip.use))
|
||||||
{
|
{
|
||||||
|
@ -832,7 +832,7 @@ evas_common_map_thread_rgba_cb(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Conte
|
||||||
|
|
||||||
evas_common_image_colorspace_normalize(src);
|
evas_common_image_colorspace_normalize(src);
|
||||||
|
|
||||||
if (!src->image.data) return EINA_FALSE;
|
if ((!src->image.data) || (!dst->image.data)) return EINA_FALSE;
|
||||||
|
|
||||||
if ((!dc->cutout.rects) && (!dc->clip.use))
|
if ((!dc->cutout.rects) && (!dc->clip.use))
|
||||||
{
|
{
|
||||||
|
|
|
@ -137,6 +137,7 @@ evas_common_polygon_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Po
|
||||||
int ext_x, ext_y, ext_w, ext_h;
|
int ext_x, ext_y, ext_w, ext_h;
|
||||||
int *sorted_index;
|
int *sorted_index;
|
||||||
|
|
||||||
|
if (!dst->image.data) return;
|
||||||
#ifdef HAVE_PIXMAN
|
#ifdef HAVE_PIXMAN
|
||||||
# ifdef PIXMAN_POLY
|
# ifdef PIXMAN_POLY
|
||||||
pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
|
pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
|
||||||
|
@ -325,6 +326,7 @@ evas_common_polygon_rgba_draw(RGBA_Image *dst, int ext_x, int ext_y, int ext_w,
|
||||||
int yy0, yy1, yi;
|
int yy0, yy1, yi;
|
||||||
int *sorted_index;
|
int *sorted_index;
|
||||||
|
|
||||||
|
if (!dst->image.data) return;
|
||||||
if ((ext_w <= 0) || (ext_h <= 0)) return;
|
if ((ext_w <= 0) || (ext_h <= 0)) return;
|
||||||
|
|
||||||
evas_common_cpu_end_opt();
|
evas_common_cpu_end_opt();
|
||||||
|
|
|
@ -111,6 +111,7 @@ rectangle_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, in
|
||||||
int yy;
|
int yy;
|
||||||
DATA32 *ptr;
|
DATA32 *ptr;
|
||||||
|
|
||||||
|
if (!dst->image.data) return;
|
||||||
RECTS_CLIP_TO_RECT(x, y, w, h, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h);
|
RECTS_CLIP_TO_RECT(x, y, w, h, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h);
|
||||||
if ((w <= 0) || (h <= 0)) return;
|
if ((w <= 0) || (h <= 0)) return;
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,7 @@ evas_common_scale_rgba_sample_draw(RGBA_Image *src, RGBA_Image *dst, int dst_cli
|
||||||
int src_w, src_h, dst_w, dst_h;
|
int src_w, src_h, dst_w, dst_h;
|
||||||
RGBA_Gfx_Func func;
|
RGBA_Gfx_Func func;
|
||||||
|
|
||||||
|
if ((!src->image.data) || (!dst->image.data)) return;
|
||||||
if (!(RECTS_INTERSECT(dst_region_x, dst_region_y, dst_region_w, dst_region_h,
|
if (!(RECTS_INTERSECT(dst_region_x, dst_region_y, dst_region_w, dst_region_h,
|
||||||
0, 0, dst->cache_entry.w, dst->cache_entry.h))) return;
|
0, 0, dst->cache_entry.w, dst->cache_entry.h))) return;
|
||||||
if (!(RECTS_INTERSECT(src_region_x, src_region_y, src_region_w, src_region_h,
|
if (!(RECTS_INTERSECT(src_region_x, src_region_y, src_region_w, src_region_h,
|
||||||
|
|
|
@ -4,6 +4,7 @@ SCALE_FUNC(RGBA_Image *src, RGBA_Image *dst, int dst_clip_x, int dst_clip_y, int
|
||||||
DATA32 *dst_ptr;
|
DATA32 *dst_ptr;
|
||||||
int src_w, src_h, dst_w, dst_h;
|
int src_w, src_h, dst_w, dst_h;
|
||||||
|
|
||||||
|
if ((!src->image.data) || (!dst->image.data)) return;
|
||||||
if (!(RECTS_INTERSECT(dst_region_x, dst_region_y, dst_region_w, dst_region_h,
|
if (!(RECTS_INTERSECT(dst_region_x, dst_region_y, dst_region_w, dst_region_h,
|
||||||
0, 0, dst->cache_entry.w, dst->cache_entry.h))) return;
|
0, 0, dst->cache_entry.w, dst->cache_entry.h))) return;
|
||||||
if (!(RECTS_INTERSECT(src_region_x, src_region_y, src_region_w, src_region_h,
|
if (!(RECTS_INTERSECT(src_region_x, src_region_y, src_region_w, src_region_h,
|
||||||
|
|
Loading…
Reference in New Issue