summaryrefslogtreecommitdiff
path: root/src/cairo-glitz-surface.c
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <sandmann@annarchy.freedesktop.org>2007-07-02 08:33:29 -0700
committerSøren Sandmann Pedersen <sandmann@annarchy.freedesktop.org>2007-07-02 08:33:29 -0700
commitef967be630dd8d0bf81ad5889d6264bebe7631d4 (patch)
treebd13259091acc26ed8563790f04982f509351a62 /src/cairo-glitz-surface.c
parent0c42dbb1925efb8228fb5246e0715bee0a5ded28 (diff)
parent5c7d2d14d78e4dfb1ef6d2c40f0910f177e07360 (diff)
Merge branch 'master' of git+ssh://sandmann@git.freedesktop.org/git/cairo
Conflicts: pixman/src/fbcompose.c pixman/src/icimage.c pixman/src/pixmanint.h pixman/src/pixregionint.h src/cairo-clip.c
Diffstat (limited to 'src/cairo-glitz-surface.c')
-rw-r--r--src/cairo-glitz-surface.c34
1 files changed, 29 insertions, 5 deletions
diff --git a/src/cairo-glitz-surface.c b/src/cairo-glitz-surface.c
index 573ee818..71351803 100644
--- a/src/cairo-glitz-surface.c
+++ b/src/cairo-glitz-surface.c
@@ -238,7 +238,7 @@ _cairo_glitz_surface_get_image (cairo_glitz_surface_t *surface,
pf.bytes_per_line = (((width * masks.bpp) / 8) + 3) & -4;
pf.scanline_order = GLITZ_PIXEL_SCANLINE_ORDER_TOP_DOWN;
- pixels = malloc (height * pf.bytes_per_line);
+ pixels = _cairo_malloc_ab (height, pf.bytes_per_line);
if (!pixels)
return CAIRO_STATUS_NO_MEMORY;
@@ -691,8 +691,22 @@ _cairo_glitz_pattern_acquire_surface (cairo_pattern_t *pattern,
n_params = gradient->n_stops * 3 + n_base_params;
- data = malloc (sizeof (glitz_fixed16_16_t) * n_params +
- sizeof (unsigned int) * gradient->n_stops);
+ /* check for int overflow */
+ {
+ int size1, size2;
+ if (n_params >= INT32_MAX / sizeof (glitz_fixed16_16_t) ||
+ gradient->n_stops >= INT32_MAX / sizeof (unsigned int))
+ return CAIRO_STATUS_NO_MEMORY;
+
+ size1 = n_params * sizeof (glitz_fixed16_16_t);
+ size2 = gradient->n_stops * sizeof (unsigned int);
+
+ if (size1 >= INT32_MAX - size2)
+ return CAIRO_STATUS_NO_MEMORY;
+
+ data = malloc (size1 + size2);
+ }
+
if (!data)
return CAIRO_STATUS_NO_MEMORY;
@@ -2056,9 +2070,19 @@ _cairo_glitz_surface_old_show_glyphs (cairo_scaled_font_t *scaled_font,
if (num_glyphs > N_STACK_BUF)
{
char *data;
+ int size1, size2;
+
+ if (num_glyphs >= INT32_MAX / sizeof(void*) ||
+ num_glyphs >= INT32_MAX / sizeof(glitz_float_t) ||
+ (num_glyphs * sizeof(glitz_float_t)) >= INT32_MAX / 16)
+ goto FAIL1;
+
+ size1 = num_glyphs * sizeof(void *);
+ size2 = num_glyphs * sizeof(glitz_float_t) * 16;
+ if (size1 >= INT32_MAX - size2)
+ goto FAIL1;
- data = malloc (num_glyphs * sizeof (void *) +
- num_glyphs * sizeof (glitz_float_t) * 16);
+ data = malloc (size1 + size2);
if (!data)
goto FAIL1;