summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2009-08-05 15:11:00 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2009-08-06 10:12:01 +0100
commit60c574ad062f3d8526056942bb7c9e71610a2773 (patch)
treea2ef5c795c44b25fa77ac652980e426ef2aa0d07
parenta3f393cf644d75065fe524e2fbb28f55844f43bf (diff)
[surface] Protect against the user setting a fallback resolution of 0.
Bug 23067 -- using clear drawing operator crashes printing http://bugs.freedesktop.org/show_bug.cgi?id=23067 Here we were hitting an assert within the paginated surface after creating a zero sized fallback image, due to the paginated surface being created with an x fallback resolution of 0 dpi (by _gtk_printer_create_cairo_surface(), gtk/gtkprinter.c:924). Avoid the bug by guarding against bad input to cairo_surface_set_fallback_resolution() which also allows us to identity the invalid caller.
-rw-r--r--src/cairo-surface.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/cairo-surface.c b/src/cairo-surface.c
index f656ed5f..8c8b8677 100644
--- a/src/cairo-surface.c
+++ b/src/cairo-surface.c
@@ -1218,6 +1218,14 @@ cairo_surface_set_fallback_resolution (cairo_surface_t *surface,
return;
}
+ if (x_pixels_per_inch <= 0 || y_pixels_per_inch <= 0) {
+ /* XXX Could delay raising the error until we fallback, but throwing
+ * the error here means that we can catch the real culprit.
+ */
+ status = _cairo_surface_set_error (surface, CAIRO_STATUS_INVALID_MATRIX);
+ return;
+ }
+
_cairo_surface_begin_modification (surface);
surface->x_fallback_resolution = x_pixels_per_inch;