diff --git a/ChangeLog b/ChangeLog index e497d8c2a..fb8d9203a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-07-16 Owen Taylor + + Patch from Martin Kretzschmar , #3798 + + * src/cairo-xlib-surface.c (_get_image_surface): prevent + sign-extension of masks.*_mask on 64bit architectures. + + * src/cairo-xcb-surface.c (_get_image_surface): ditto. + 2005-07-28 Owen Taylor * src/cairo-image-surface.c (_cairo_image_surface_acquire_source,dest_image) diff --git a/src/cairo-xcb-surface.c b/src/cairo-xcb-surface.c index 04f5892ed..b743cf4d8 100644 --- a/src/cairo-xcb-surface.c +++ b/src/cairo-xcb-surface.c @@ -481,10 +481,10 @@ _get_image_surface (cairo_xcb_surface_t *surface, masks.blue_mask = surface->visual->blue_mask; } else if (surface->has_format) { masks.bpp = bpp; - masks.red_mask = surface->format.direct.red_mask << surface->format.direct.red_shift; - masks.green_mask = surface->format.direct.green_mask << surface->format.direct.green_shift; - masks.blue_mask = surface->format.direct.blue_mask << surface->format.direct.blue_shift; - masks.alpha_mask = surface->format.direct.alpha_mask << surface->format.direct.alpha_shift; + masks.red_mask = (unsigned long)surface->format.direct.red_mask << surface->format.direct.red_shift; + masks.green_mask = (unsigned long)surface->format.direct.green_mask << surface->format.direct.green_shift; + masks.blue_mask = (unsigned long)surface->format.direct.blue_mask << surface->format.direct.blue_shift; + masks.alpha_mask = (unsigned long)surface->format.direct.alpha_mask << surface->format.direct.alpha_shift; } else { masks.bpp = bpp; masks.red_mask = 0; diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c index 39d101014..5f26a2f49 100644 --- a/src/cairo-xlib-surface.c +++ b/src/cairo-xlib-surface.c @@ -413,10 +413,10 @@ _get_image_surface (cairo_xlib_surface_t *surface, masks.blue_mask = surface->visual->blue_mask; } else if (surface->format) { masks.bpp = ximage->bits_per_pixel; - masks.red_mask = surface->format->direct.redMask << surface->format->direct.red; - masks.green_mask = surface->format->direct.greenMask << surface->format->direct.green; - masks.blue_mask = surface->format->direct.blueMask << surface->format->direct.blue; - masks.alpha_mask = surface->format->direct.alphaMask << surface->format->direct.alpha; + masks.red_mask = (unsigned long)surface->format->direct.redMask << surface->format->direct.red; + masks.green_mask = (unsigned long)surface->format->direct.greenMask << surface->format->direct.green; + masks.blue_mask = (unsigned long)surface->format->direct.blueMask << surface->format->direct.blue; + masks.alpha_mask = (unsigned long)surface->format->direct.alphaMask << surface->format->direct.alpha; } else { masks.bpp = ximage->bits_per_pixel; masks.red_mask = 0;