summaryrefslogtreecommitdiff
path: root/src/cairo-traps-compositor.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-11-24 01:08:30 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2011-11-24 10:16:22 +0000
commit2c4f6bbfbcaacea41386c36f42210120ee815055 (patch)
treeed3524977b9898532fced3ba5f2a0147dc91dc8b /src/cairo-traps-compositor.c
parent5e4a0bd892263a5801fdaaa9fa5dbbcfc14c211a (diff)
downloadcairo-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.c20
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,