[cairo] [PATCH] Fix _cairo_region_get_boxes usage

Jeff Muizelaar jeff at infidigm.net
Fri Feb 13 12:09:06 PST 2009


Chris,

The attached patch fixes some issues with callers of
_cairo_region_get_boxes. The new api seems a little bit difficult to
use and I'm wondering if we can fix it at all? Though I don't really have any
ideas or know if it's worth it. Thoughts?

-Jeff
-------------- next part --------------
commit c312af6f7128f2d105d8ddba8563870f45858a96
Author: Jeff Muizelaar <jmuizelaar at mozilla.com>
Date:   Fri Feb 13 13:42:09 2009 -0500

    Fix _cairo_region_get_boxes usage
    
    Commit f15b1f26becf28457e9ccf8903257a0dec25d547 broke the win32 backend and
    likely others. Previously _cairo_region_get_boxes would NULL the boxes pointer
    if there were no boxes and would relying on _cairo_region_boxes_fini calling on
    free(NULL)

diff --git a/src/cairo-paginated-surface.c b/src/cairo-paginated-surface.c
index 5d4e08f..b76c521 100644
--- a/src/cairo-paginated-surface.c
+++ b/src/cairo-paginated-surface.c
@@ -381,7 +381,7 @@ _paint_page (cairo_paginated_surface_t *surface)
 
     if (has_finegrained_fallback) {
         cairo_region_t *region;
-        cairo_box_int_t *boxes;
+        cairo_box_int_t *boxes = NULL;
         int num_boxes, i;
 
 	surface->backend->set_paginated_mode (surface->target,
diff --git a/src/cairo-win32-surface.c b/src/cairo-win32-surface.c
index 03a8f61..e6b2e26 100644
--- a/src/cairo-win32-surface.c
+++ b/src/cairo-win32-surface.c
@@ -1461,7 +1461,7 @@ _cairo_win32_surface_set_clip_region (void           *abstract_surface,
     /* Then combine any new region with it */
     if (region) {
 	cairo_rectangle_int_t extents;
-	cairo_box_int_t *boxes;
+	cairo_box_int_t *boxes = NULL;
 	int num_boxes;
 	RGNDATA *data;
 	size_t data_size;
diff --git a/src/cairo-xcb-surface.c b/src/cairo-xcb-surface.c
index 2ae7dcf..88bdc4f 100644
--- a/src/cairo-xcb-surface.c
+++ b/src/cairo-xcb-surface.c
@@ -1555,7 +1555,7 @@ _cairo_xcb_surface_set_clip_region (void           *abstract_surface,
 	    xcb_render_change_picture (surface->dpy, surface->dst_picture,
 		XCB_RENDER_CP_CLIP_MASK, none);
     } else {
-	cairo_box_int_t *boxes;
+	cairo_box_int_t *boxes = NULL;
 	cairo_status_t status;
 	xcb_rectangle_t *rects = NULL;
 	int n_boxes, i;


More information about the cairo mailing list