From 60c574ad062f3d8526056942bb7c9e71610a2773 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 5 Aug 2009 15:11:00 +0100 Subject: [PATCH] [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. --- src/cairo-surface.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cairo-surface.c b/src/cairo-surface.c index f656ed5f0..8c8b8677c 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;