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

Bill Spitzak <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
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.

--
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.