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

Chuanbo Weng <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
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 */
-- 
1.7.5.4

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