diff options
-rw-r--r-- | ext/gd/libgd/webpimg.c | 18 | ||||
-rw-r--r-- | ext/gd/tests/bug70102.phpt | 30 |
2 files changed, 39 insertions, 9 deletions
diff --git a/ext/gd/libgd/webpimg.c b/ext/gd/libgd/webpimg.c index 6ce991fbdd..f287e5414f 100644 --- a/ext/gd/libgd/webpimg.c +++ b/ext/gd/libgd/webpimg.c @@ -57,21 +57,21 @@ static inline int clip(float v, int a, int b) { return (v > b) ? b : (v < 0) ? 0 : (int)(v); } enum { - COLOR_RED = 0, - COLOR_GREEN = 1, - COLOR_BLUE = 2, - ALPHA_CHANNEL = 3 + COLOR_RED = 1, + COLOR_GREEN = 2, + COLOR_BLUE = 3, + ALPHA_CHANNEL = 0 }; -/* endian neutral extractions of RGBA from a 32 bit pixel */ +/* endian neutral extractions of ARGB from a 32 bit pixel */ static const uint32 RED_SHIFT = - 8 * (sizeof(uint32) - 1 - COLOR_RED); /* 24 */ + 8 * (sizeof(uint32) - 1 - COLOR_RED); /* 16 */ static const uint32 GREEN_SHIFT = - 8 * (sizeof(uint32) - 1 - COLOR_GREEN); /* 16 */ + 8 * (sizeof(uint32) - 1 - COLOR_GREEN); /* 8 */ static const uint32 BLUE_SHIFT = - 8 * (sizeof(uint32) - 1 - COLOR_BLUE); /* 8 */ + 8 * (sizeof(uint32) - 1 - COLOR_BLUE); /* 0 */ static const uint32 ALPHA_SHIFT = - 8 * (sizeof(uint32) - 1 - ALPHA_CHANNEL); /* 0 */ + 8 * (sizeof(uint32) - 1 - ALPHA_CHANNEL); /* 24 */ static inline int GetRed(const uint32* rgba) { return gdTrueColorGetRed(*rgba); diff --git a/ext/gd/tests/bug70102.phpt b/ext/gd/tests/bug70102.phpt new file mode 100644 index 0000000000..b82c757ebe --- /dev/null +++ b/ext/gd/tests/bug70102.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #70102 (imagecreatefromwebm() shifts colors) +--SKIPIF-- +<?php +if (!extension_loaded('gd')) die('skip gd extension not available'); +if (!function_exists('imagewebp') || !function_exists('imagecreatefromwebp')) + die('skip WebP support not available'); +?> +--FILE-- +<?php +$filename = __DIR__ . '/bug70102.webp'; + +$im = imagecreatetruecolor(8, 8); +$white = imagecolorallocate($im, 255, 255, 255); +var_dump($white & 0xffffff); +imagefilledrectangle($im, 0, 0, 7, 7, $white); +imagewebp($im, $filename); +imagedestroy($im); + +$im = imagecreatefromwebp($filename); +$color = imagecolorat($im, 4, 4); +var_dump($color & 0xffffff); +?> +--CLEAN-- +<?php +unlink(__DIR__ . '/bug70102.webp'); +?> +--EXPECT-- +int(16777215) +int(16777215) |