summaryrefslogtreecommitdiff
path: root/src/cairo-xlib-display.c
diff options
context:
space:
mode:
authorUli Schlachter <psychon@znc.in>2011-07-21 16:03:36 +0200
committerUli Schlachter <psychon@znc.in>2011-07-21 16:51:26 +0200
commit0858533419dc1a38ef7c2bf6e07fb89714af5598 (patch)
tree11f95a776a4b1ef96ab0828d5fd663bff981f644 /src/cairo-xlib-display.c
parent7c2ccef3eb636661ee45c501c8345b6bde9a827c (diff)
downloadcairo-0858533419dc1a38ef7c2bf6e07fb89714af5598.tar.gz
Xlib,xcb: Make *_debug_[sg]et_precision() more robust
This adds checks for NULL pointers, devices in an error state and devices which aren't owned by the right backend. Signed-off-by: Uli Schlachter <psychon@znc.in>
Diffstat (limited to 'src/cairo-xlib-display.c')
-rw-r--r--src/cairo-xlib-display.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/cairo-xlib-display.c b/src/cairo-xlib-display.c
index cce69ff90..fe93e1cae 100644
--- a/src/cairo-xlib-display.c
+++ b/src/cairo-xlib-display.c
@@ -749,8 +749,15 @@ void
cairo_xlib_device_debug_set_precision (cairo_device_t *device,
int precision)
{
- if (device->status)
- return;
+ if (device == NULL || device->status)
+ return;
+ if (device->backend->type != CAIRO_DEVICE_TYPE_XLIB) {
+ cairo_status_t status;
+
+ status = _cairo_device_set_error (device, CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
+ (void) status;
+ return;
+ }
((cairo_xlib_display_t *) device)->force_precision = precision;
}
@@ -758,8 +765,15 @@ cairo_xlib_device_debug_set_precision (cairo_device_t *device,
int
cairo_xlib_device_debug_get_precision (cairo_device_t *device)
{
- if (device->status)
- return -1;
+ if (device == NULL || device->status)
+ return -1;
+ if (device->backend->type != CAIRO_DEVICE_TYPE_XLIB) {
+ cairo_status_t status;
+
+ status = _cairo_device_set_error (device, CAIRO_STATUS_DEVICE_TYPE_MISMATCH);
+ (void) status;
+ return -1;
+ }
return ((cairo_xlib_display_t *) device)->force_precision;
}