summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmb@php.net>2015-07-19 22:40:49 +0200
committerChristoph M. Becker <cmb@php.net>2015-07-19 22:40:49 +0200
commit6c8dbfd5c19b4327e2f785a4edd604fe32a51ebe (patch)
treee7c6eecce54011294f67f9ced644cfc0c04f2b11
parent209223b97e179e27f1520a870e954e7de13c03bb (diff)
parent4b2d025937769d383e6a842a90658c58f10d5794 (diff)
downloadphp-git-6c8dbfd5c19b4327e2f785a4edd604fe32a51ebe.tar.gz
Merge branch 'PHP-5.6'
* PHP-5.6: updated NEWS Fix #70102: imagecreatefromwebm() shifts colors
-rw-r--r--ext/gd/libgd/webpimg.c18
-rw-r--r--ext/gd/tests/bug70102.phpt30
2 files changed, 39 insertions, 9 deletions
diff --git a/ext/gd/libgd/webpimg.c b/ext/gd/libgd/webpimg.c
index 5f19bd78d6..90e5fd369d 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)