From: Jiyoun Park <jy0703.park@samsung.com>

Subject: [E-devel] [Patch] evas scale function overflow problem.

patch in with modifications to be "nicer" to deal with.



SVN revision: 60252
This commit is contained in:
Jiyoun Park 2011-06-13 02:57:01 +00:00 committed by Carsten Haitzler
parent e6119fa4d9
commit fd68d7fdb6
4 changed files with 15 additions and 8 deletions

View File

@ -22,7 +22,7 @@ static void
scale_calc_y_points(DATA32** p, DATA32 *src, int sw, int sh, int dh, int cy, int ch)
{
int i, val, inc;
if (sh > SCALE_SIZE_MAX) return;
val = 0;
inc = (sh << 16) / dh;
for (i = 0; i < dh; i++)
@ -39,7 +39,7 @@ static void
scale_calc_x_points(int *p, int sw, int dw, int cx, int cw)
{
int i, val, inc;
if (sw > SCALE_SIZE_MAX) return;
val = 0;
inc = (sw << 16) / dw;
for (i = 0; i < dw; i++)
@ -57,6 +57,7 @@ scale_calc_a_points(int *p, int s, int d, int c, int cc)
{
int i, val, inc;
if (s > SCALE_SIZE_MAX) return;
if (d >= s)
{
val = 0;

View File

@ -12,6 +12,10 @@
DATA32 *buf, *pbuf, *pbuf_end;
RGBA_Gfx_Func func = NULL;
/* check value to make overflow(only check value related with overflow) */
if ((src_region_w > SCALE_SIZE_MAX) ||
(src_region_h > SCALE_SIZE_MAX)) return;
/* a scanline buffer */
pdst = dst_ptr; // it's been set at (dst_clip_x, dst_clip_y)
pdst_end = pdst + (dst_clip_h * dst_w);

View File

@ -10,7 +10,7 @@ evas_common_scale_rgba_span_(DATA32 *src, DATA8 *mask __UNUSED__, int src_len, D
if (!src || !dst) return;
if ((src_len < 1) || (dst_len < 1)) return;
if ((src_len > 65535) || (dst_len > 65535)) return;
if ((src_len > SCALE_SIZE_MAX) || (dst_len > SCALE_SIZE_MAX)) return;
if (mul_col != 0xffffffff)
mul = 1;
if (dir < 0)
@ -114,7 +114,7 @@ evas_common_scale_rgba_a8_span_(DATA32 *src, DATA8 *mask, int src_len, DATA32 mu
if (!src || !mask || !dst) return;
if ((src_len < 1) || (dst_len < 1)) return;
if ((src_len > 65535) || (dst_len > 65535)) return;
if ((src_len > SCALE_SIZE_MAX) || (dst_len > SCALE_SIZE_MAX)) return;
if (mul_col != 0xffffffff)
mul = 1;
if (dir < 0)
@ -241,7 +241,7 @@ evas_common_scale_a8_span_(DATA32 *src __UNUSED__, DATA8 *mask, int src_len, DAT
if (!mask || !dst) return;
if ((src_len < 1) || (dst_len < 1)) return;
if ((src_len > 65535) || (dst_len > 65535)) return;
if ((src_len > SCALE_SIZE_MAX) || (dst_len > SCALE_SIZE_MAX)) return;
if (dir < 0)
{
pdst += dst_len - 1;
@ -316,7 +316,7 @@ evas_common_scale_clip_a8_span_(DATA32 *src __UNUSED__, DATA8 *mask, int src_len
if (!mask || !dst) return;
if ((src_len < 1) || (dst_len < 1)) return;
if ((src_len > 65535) || (dst_len > 65535)) return;
if ((src_len > SCALE_SIZE_MAX) || (dst_len > SCALE_SIZE_MAX)) return;
if (mul_col != 0xffffffff)
mul = 1;
if (dir < 0)
@ -483,7 +483,7 @@ evas_common_scale_hsva_span(DATA32 *src, DATA8 *mask __UNUSED__, int src_len, DA
if (!src || !dst) return;
if ((src_len < 1) || (dst_len < 1)) return;
if ((src_len > 65535) || (dst_len > 65535)) return;
if ((src_len > SCALE_SIZE_MAX) || (dst_len > SCALE_SIZE_MAX)) return;
if (mul_col != 0xffffffff)
mul = 1;
if (dir < 0)
@ -566,7 +566,7 @@ evas_common_scale_hsva_a8_span(DATA32 *src, DATA8 *mask, int src_len, DATA32 mul
if (!src || !mask || !dst) return;
if ((src_len < 1) || (dst_len < 1)) return;
if ((src_len > 65535) || (dst_len > 65535)) return;
if ((src_len > SCALE_SIZE_MAX) || (dst_len > SCALE_SIZE_MAX)) return;
if (mul_col != 0xffffffff)
mul = 1;
if (dir < 0)

View File

@ -1128,6 +1128,8 @@ struct _Convert_Pal
/*****************************************************************************/
#define SCALE_SIZE_MAX ((1 << 15) - 1)
#ifdef __cplusplus
extern "C" {
#endif