[cairo] [PATCH 1/2] Don't return NULL to clients when getting image

Bryce Harrington bryce at osg.samsung.com
Tue Sep 23 11:00:35 PDT 2014


On Tue, Sep 23, 2014 at 02:48:08AM -0700, Bryce Harrington wrote:
> On Tue, Sep 23, 2014 at 10:07:30AM +0100, Chris Wilson wrote:
> > On Tue, Sep 23, 2014 at 01:27:35AM -0700, Bryce Harrington wrote:
> > > On Tue, Sep 23, 2014 at 07:26:51AM +0100, Chris Wilson wrote:
> > > > On Mon, Sep 22, 2014 at 03:50:25PM -0700, Bryce Harrington wrote:
> > > > > diff --git a/src/win32/cairo-win32-surface.c b/src/win32/cairo-win32-surface.c
> > > > > index 7cd46fc..f11cbd8 100644
> > > > > --- a/src/win32/cairo-win32-surface.c
> > > > > +++ b/src/win32/cairo-win32-surface.c
> > > > > @@ -188,7 +188,7 @@ cairo_surface_t *
> > > > >  cairo_win32_surface_get_image (cairo_surface_t *surface)
> > > > >  {
> > > > >      if (surface->backend->type != CAIRO_SURFACE_TYPE_WIN32)
> > > > 
> > > > This is still dangerous - error surfaces have no surface->backend to
> > > > dereference.
> > > > -Chris
> > > 
> > > Good point.  Obviously users should not be trying to use error surfaces,
> > > but I suppose they might not check.
> > > 
> > > What would you suggest?  An assert or NULL check on surface->backend?
> > > Or introduce error backends?
> > 
> > We use surface->backend == NULL as an indicator that it is an error
> > surface. See _cairo_surface_is_image() et al.
> 
> Okay, that makes sense.  So null checks, possibly via inlined helper
> functions ala _cairo_surface_is_image, would be the solution here.
> 
> Looks like there's quite a few places where surface->backend gets
> referenced, that could possibly use such a check.
> 
> Ravi - this looks like this refactoring might be up your alley if you're
> interested.

Okay, Ravi's going to handle the surface->backend checks as a followup
patch.

The original patch to return surface errors is conceptually distinct, so
I'm going to land it first and get it out of the way.  Any code that
would fail on a null surface->backend would certainly have failed on a
null surface before that.

Bryce


More information about the cairo mailing list