diff --git a/gfx/cairo/cairo/src/cairo-image-surface.c b/gfx/cairo/cairo/src/cairo-image-surface.c --- a/gfx/cairo/cairo/src/cairo-image-surface.c +++ b/gfx/cairo/cairo/src/cairo-image-surface.c @@ -2885,16 +2885,18 @@ static cairo_status_t cairo_bool_t need_clip_mask = FALSE; cairo_status_t status; struct _cairo_boxes_chunk *chunk; uint32_t pixel; int i; if (clip != NULL) { status = _cairo_clip_get_region (clip, &clip_region); + if (unlikely (status == CAIRO_INT_STATUS_NOTHING_TO_DO)) + return CAIRO_STATUS_SUCCESS; need_clip_mask = status == CAIRO_INT_STATUS_UNSUPPORTED; if (need_clip_mask && (op == CAIRO_OPERATOR_SOURCE || ! extents->is_bounded)) { return CAIRO_INT_STATUS_UNSUPPORTED; } if (clip_region != NULL && cairo_region_num_rectangles (clip_region) == 1) @@ -3200,30 +3202,20 @@ static cairo_status_t return _clip_and_composite (dst, op, src, _composite_traps, &info, extents, clip); } static cairo_clip_path_t * _clip_get_single_path (cairo_clip_t *clip) { - cairo_clip_path_t *iter = clip->path; - cairo_clip_path_t *path = NULL; - - do { - if ((iter->flags & CAIRO_CLIP_PATH_IS_BOX) == 0) { - if (path != NULL) - return FALSE; - - path = iter; - } - iter = iter->prev; - } while (iter != NULL); - - return path; + if (clip->path->prev == NULL) + return clip->path; + + return NULL; } /* high level image interface */ static cairo_int_status_t _cairo_image_surface_paint (void *abstract_surface, cairo_operator_t op, const cairo_pattern_t *source,