[cairo] On allowing NULL font options

Alp Toker alp at atoker.com
Thu Jan 17 19:29:11 PST 2008


Behdad Esfahbod wrote:
> On Thu, 2008-01-17 at 17:39 -0500, Chris Wilson wrote:
>>     [cairo-font-options] Treat NULL as a default cairo_font_options_t
>>     
>>     Interpret a NULL cairo_font_options_t as the default values - i.e
>>     as if it were a fresh pointer returned by
>> cairo_font_options_create().
> 
> I thought about this before.  I think we shouldn't doing it.  Currently
> the cairo practice is: no NULL.

I agree with Behdad here, but perhaps we should be more careful never to 
return a NULL font options in external libraries like gdkcairo.

Just today I received a crasher bug report in an application. The 
problem code?

     if (GdkScreen* screen = gdk_screen_get_default())
         options = gdk_screen_get_font_options(screen);
     else
         options = defaultOptions;

     m_scaledFont = cairo_scaled_font_create(face, &mat, &ctm, options);

This looks safe, but in fact will lead to crashes because 
gdk_screen_get_font_options() is documented as being able to return NULL:

/**
  * gdk_screen_get_font_options:
  * @screen: a #GdkScreen
  *
  * Gets any options previously set with gdk_screen_set_font_options().
  *
  * Return value: the current font options, or %NULL if no default
  *  font options have been set.
  *
  * Since: 2.10
  **/

This is hard to catch because, on desktop systems, 
gdk_screen_set_font_options() almost always returns a valid 
cairo_font_options_t*.

It only seems to return NULL on obscure configurations (the user was 
testing on an embedded ARM board), so leads to crashes further down the 
line even after reasonable testing.


More information about the cairo mailing list