Re: [PATCH] Avoid potential crash when subsurface's size is less than 0.

Chris Wilson <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
On Tue, 13 Mar 2012 10:00:52 -0700, Bill Spitzak <[email protected]> wrote:
> On 03/12/2012 07:00 PM, Chuanbo Weng wrote:
> > When cairo_surface_create_for_rectangle() get non-integer parameters,
> > the subsurface's size may be negative(e.g x = 0.2, width = 0.7, the
> > final width will be -1). It may cause crash somewhere when use this
> > subsurface. Although fractional surface is ill-defined, we should avoid
> > crash when pass non-integer parameter.
> > ---
> >   src/cairo-surface-subsurface.c |    2 ++
> >   1 files changed, 2 insertions(+), 0 deletions(-)
> >
> > diff --git a/src/cairo-surface-subsurface.c b/src/cairo-surface-subsurface.c
> > index 8590bf0..a9fae4b 100644
> > --- a/src/cairo-surface-subsurface.c
> > +++ b/src/cairo-surface-subsurface.c
> > @@ -483,7 +483,9 @@ cairo_surface_create_for_rectangle (cairo_surface_t *target,
> >       surface->extents.x = ceil (x);
> >       surface->extents.y = ceil (y);
> >       surface->extents.width = floor (x + width) - surface->extents.x;
> > +    surface->extents.width = surface->extents.width>= 0 ? surface->extents.width : 0;
> >       surface->extents.height = floor (y + height) - surface->extents.y;
> > +    surface->extents.height = surface->extents.height>= 0 ? surface->extents.height : 0;
> >
> >       if (target->backend->type == CAIRO_SURFACE_TYPE_SUBSURFACE) {
> >   	/* Maintain subsurfaces as 1-depth */
> 
> Why not use:
> 
>    extents.x = floor(x);
>    extents.width = ceil(width);
> 
> This will produce a positive size as long as width is positive.

I wanted to define an integer surface that never accessed the fractional
pixels outside of its extents. The question is not what to replace that
logic with, but how to handle the user specifying a fractional surface
as a source.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
--
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.