summaryrefslogtreecommitdiff
path: root/src/cairo-xlib-xcb-surface.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-04-14 19:05:09 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2010-04-14 19:31:31 +0100
commit005596907fc9b62fa4bf72ec35e0d1a1a242ef93 (patch)
tree04589d4d62606f041cb3002657182f727c12aaf3 /src/cairo-xlib-xcb-surface.c
parent8afd4e4c3db53159d1e5b6f13d3355cb5fb1750b (diff)
downloadcairo-005596907fc9b62fa4bf72ec35e0d1a1a242ef93.tar.gz
xlib: Don't operate on an error object inside setters.
Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=599574 The backend API manipulated the surface prior to checking whether it was an inert error surface - and in the event of an error surface, tried to overwrite it's error status.
Diffstat (limited to 'src/cairo-xlib-xcb-surface.c')
-rw-r--r--src/cairo-xlib-xcb-surface.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/cairo-xlib-xcb-surface.c b/src/cairo-xlib-xcb-surface.c
index a8e0cde7b..3dbb9bd91 100644
--- a/src/cairo-xlib-xcb-surface.c
+++ b/src/cairo-xlib-xcb-surface.c
@@ -396,6 +396,9 @@ cairo_xlib_surface_set_size (cairo_surface_t *abstract_surface,
cairo_xlib_xcb_surface_t *surface = (cairo_xlib_xcb_surface_t *) abstract_surface;
cairo_status_t status;
+ if (unlikely (abstract_surface->status))
+ return;
+
if (surface->base.type != CAIRO_SURFACE_TYPE_XLIB) {
status = _cairo_surface_set_error (abstract_surface,
CAIRO_STATUS_SURFACE_TYPE_MISMATCH);
@@ -414,6 +417,9 @@ cairo_xlib_surface_set_drawable (cairo_surface_t *abstract_surface,
cairo_xlib_xcb_surface_t *surface = (cairo_xlib_xcb_surface_t *)abstract_surface;
cairo_status_t status;
+ if (unlikely (abstract_surface->status))
+ return;
+
if (surface->base.type != CAIRO_SURFACE_TYPE_XLIB) {
status = _cairo_surface_set_error (abstract_surface,
CAIRO_STATUS_SURFACE_TYPE_MISMATCH);