From: sfeam <sf...@us...> - 2018-05-10 16:04:29
|
On Thursday, 10 May 2018 09:31:32 Allin Cottrell wrote: > I see that since 2017-02-09 gnuplot requires version 2.28 or higher of > GLib, on account of use of the macro g_clear_object. > > Unfortunately it can be difficult to build GLib on (or for) some older > systems, such as OS X <= 10.4, but older GLib versions are easier > (e.g. 2.18). I'd like to suggest pushing the GLib dependency back to > 2.18 and adding a simple compatibility macro in gp_cairo.c. Here's an > illustrative diff relative to 5.2.3: > > --- gp_cairo.c.orig 2018-05-09 16:46:59.510301745 -0400 > +++ gp_cairo.c 2018-05-10 08:32:07.378541918 -0400 > @@ -77,6 +77,13 @@ > #define rint(x) floor((x)+0.5L) > #endif > > +#if GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 28 > +#define g_clear_object(op) \ > + { gpointer *_p = (gpointer) (op); \ > + if (_p && *_p) { g_object_unref(*_p); *_p = NULL; } \ > + } > +#endif > + > /* undef this to see what happens without the Symbol-to-unicode processing */ > #define MAP_SYMBOL > > Any thoughts? The change to use g_clear_object fixed detectable use-after-free errors. Your proposed macro goes back to calling g_object_unref without any separate reference counting, so I imagine it would reintroduce the use-after-free errors. Have you checked? Or maybe the need for reference counting was introduced in some later version of glib? Ethan |