In fast_composite_tiled_repeat() don't clone images with a palette
authorSøren Sandmann Pedersen <ssp@redhat.com>
Sun, 1 Jul 2012 10:54:06 +0000 (06:54 -0400)
committerSøren Sandmann Pedersen <ssp@redhat.com>
Mon, 2 Jul 2012 22:21:21 +0000 (18:21 -0400)
In fast_composite_tiled_repeat() if the source image is less than a
certain constant width, a clone is created which is then
pre-repeated. However, the source image's palette, if it has one, is
not cloned, so for indexed images, the pre-repeating would crash.

Fix this by not doing any pre-repeating for images with a palette set.

pixman/pixman-fast-path.c

index e79b069..9778b0c 100644 (file)
@@ -1280,8 +1280,9 @@ fast_composite_tiled_repeat (pixman_implementation_t *imp,
 
        src_bpp = PIXMAN_FORMAT_BPP (src_image->bits.format);
 
-       if (src_image->bits.width < REPEAT_MIN_WIDTH &&
-           (src_bpp == 32 || src_bpp == 16 || src_bpp == 8))
+       if (src_image->bits.width < REPEAT_MIN_WIDTH            &&
+           (src_bpp == 32 || src_bpp == 16 || src_bpp == 8)    &&
+           !src_image->bits.indexed)
        {
            sx = src_x;
            sx = MOD (sx, src_image->bits.width);