diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-11-24 01:08:30 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-11-24 10:16:22 +0000 |
commit | 2c4f6bbfbcaacea41386c36f42210120ee815055 (patch) | |
tree | ed3524977b9898532fced3ba5f2a0147dc91dc8b /src/cairo-traps-compositor.c | |
parent | 5e4a0bd892263a5801fdaaa9fa5dbbcfc14c211a (diff) | |
download | cairo-2c4f6bbfbcaacea41386c36f42210120ee815055.tar.gz |
gl: Prevent the traps compositor from exploding
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-traps-compositor.c')
-rw-r--r-- | src/cairo-traps-compositor.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/cairo-traps-compositor.c b/src/cairo-traps-compositor.c index 0df3b7840..0371c807f 100644 --- a/src/cairo-traps-compositor.c +++ b/src/cairo-traps-compositor.c @@ -1797,6 +1797,10 @@ _cairo_traps_compositor_paint (const cairo_compositor_t *_compositor, cairo_boxes_t boxes; cairo_int_status_t status; + status = compositor->check_composite (extents); + if (unlikely (status)) + return status; + _cairo_clip_steal_boxes (extents->clip, &boxes); status = clip_and_composite_boxes (compositor, extents, &boxes); _cairo_clip_unsteal_boxes (extents->clip, &boxes); @@ -1811,6 +1815,10 @@ _cairo_traps_compositor_mask (const cairo_compositor_t *_compositor, const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t*)_compositor; cairo_int_status_t status; + status = compositor->check_composite (extents); + if (unlikely (status)) + return status; + if (extents->mask_pattern.base.type == CAIRO_PATTERN_TYPE_SOLID && extents->clip->path == NULL) { status = clip_and_composite (compositor, extents, @@ -1853,6 +1861,10 @@ _cairo_traps_compositor_stroke (const cairo_compositor_t *_compositor, const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t *)_compositor; cairo_int_status_t status; + status = compositor->check_composite (extents); + if (unlikely (status)) + return status; + status = CAIRO_INT_STATUS_UNSUPPORTED; if (_cairo_path_fixed_stroke_is_rectilinear (path)) { cairo_boxes_t boxes; @@ -1912,6 +1924,10 @@ _cairo_traps_compositor_fill (const cairo_compositor_t *_compositor, const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t *)_compositor; cairo_int_status_t status; + status = compositor->check_composite (extents); + if (unlikely (status)) + return status; + status = CAIRO_INT_STATUS_UNSUPPORTED; if (_cairo_path_fixed_fill_is_rectilinear (path)) { cairo_boxes_t boxes; @@ -1995,6 +2011,10 @@ _cairo_traps_compositor_glyphs (const cairo_compositor_t *_compositor, const cairo_traps_compositor_t *compositor = (cairo_traps_compositor_t *)_compositor; cairo_int_status_t status; + status = compositor->check_composite (extents); + if (unlikely (status)) + return status; + _cairo_scaled_font_freeze_cache (scaled_font); status = compositor->check_composite_glyphs (extents, scaled_font, glyphs, |