summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKouhei Sutou <kou@clear-code.com>2013-10-28 22:37:54 +0900
committerBryce Harrington <b.harrington@samsung.com>2013-10-31 20:34:04 -0700
commit66f4140e73e423bfed640cfde5cb50c08cf29e2e (patch)
tree7d292188fa4b10922dea9f573036f8d820117a54
parentb9263fea14c4c6266140205c0bffb3ae93750999 (diff)
cairo_create(): Add finished surface check
Without this change, the following program crashes: #include <cairo.h> #include <cairo-svg.h> int main(int argc, char **argv) { cairo_t *cr; cairo_surface_t *finished_surface; finished_surface = cairo_svg_surface_create ("/tmp/xxx.svg", 1.0, 1.0); cairo_surface_finish (finished_surface); cr = cairo_create (finished_surface); cairo_destroy (cr); cairo_surface_destroy (finished_surface); return 0; } Reviewed-by: Bryce Harrington <b.harrington@samsung.com>
-rw-r--r--src/cairo.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/cairo.c b/src/cairo.c
index c7128ae..e3acf4d 100644
--- a/src/cairo.c
+++ b/src/cairo.c
@@ -230,6 +230,8 @@ cairo_create (cairo_surface_t *target)
return _cairo_create_in_error (_cairo_error (CAIRO_STATUS_NULL_POINTER));
if (unlikely (target->status))
return _cairo_create_in_error (target->status);
+ if (unlikely (target->finished))
+ return _cairo_create_in_error (_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
if (target->backend->create_context == NULL)
return _cairo_create_in_error (_cairo_error (CAIRO_STATUS_WRITE_ERROR));