cairo: Only apply options to table items, to avoid crash.
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 7 Jan 2012 21:14:02 +0000 (13:14 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Sat, 7 Jan 2012 21:14:02 +0000 (13:14 -0800)
Most of the members of struct xr_rendering, including the 'xr'
member, are used only for table items.  In chart items, these
members are zeroed.  But xr_rendering_apply_options() attempted to
use the 'xr' member even for chart items, which caused a crash.

This reverts and replaces the provisional fix already applied by
John Darrington in commit ee7b576822f (Avoid crash rendering charts
in the gui interface.), which also fixed the crash but added extra
unnecessary work.

Reported-by: Nick Macdonald <nick@nickmacdonald.net>
src/output/cairo.c

index 8156016cd415bd33fe97ed4176ed91e3d6299aab..cfa9669329e0edf7990e166c304cadacc3898fda 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -982,7 +982,8 @@ xr_rendering_create_text (struct xr_driver *xr, const char *text, cairo_t *cr)
 void 
 xr_rendering_apply_options (struct xr_rendering *xr, struct string_map *o)
 {
-  apply_options (xr->xr, o);
+  if (is_table_item (xr->item))
+    apply_options (xr->xr, o);
 }
 
 struct xr_rendering *
@@ -1015,8 +1016,6 @@ xr_rendering_create (struct xr_driver *xr, const struct output_item *item,
     {
       r = xzalloc (sizeof *r);
       r->item = output_item_ref (item);
-      r->xr = xr;
-      xr_set_cairo (xr, cr);
     }
 
   return r;