mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Merge branch 'pull-request/2664'
* pull-request/2664: Fix unittest for minimal length in random string Add support for webp in imagecreatefromstring
This commit is contained in:
commit
791410ab66
3
NEWS
3
NEWS
@ -12,6 +12,9 @@ PHP NEWS
|
||||
. Fixed bug #74125 (Fixed finding CURL on systems with multiarch support).
|
||||
(cebe)
|
||||
|
||||
- GD:
|
||||
. Added support for WebP in imagecreatefromstring() (Andreas Treichel, cmb).
|
||||
|
||||
- LDAP:
|
||||
. Added ldap_exop_refresh helper for EXOP REFRESH operation with dds overlay.
|
||||
(Come)
|
||||
|
33
ext/gd/gd.c
33
ext/gd/gd.c
@ -133,7 +133,7 @@ static void php_image_filter_pixelate(INTERNAL_FUNCTION_PARAMETERS);
|
||||
static gdImagePtr _php_image_create_from_string (zval *Data, char *tn, gdImagePtr (*ioctx_func_p)());
|
||||
static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)());
|
||||
static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)());
|
||||
static int _php_image_type(char data[8]);
|
||||
static int _php_image_type(char data[12]);
|
||||
static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type);
|
||||
static void _php_image_bw_convert(gdImagePtr im_org, gdIOCtx *out, int threshold);
|
||||
|
||||
@ -2224,7 +2224,7 @@ static int _php_ctx_getmbi(gdIOCtx *ctx)
|
||||
*/
|
||||
static const char php_sig_gd2[3] = {'g', 'd', '2'};
|
||||
|
||||
static int _php_image_type (char data[8])
|
||||
static int _php_image_type (char data[12])
|
||||
{
|
||||
/* Based on ext/standard/image.c */
|
||||
|
||||
@ -2232,18 +2232,18 @@ static int _php_image_type (char data[8])
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!memcmp(data, php_sig_gd2, 3)) {
|
||||
if (!memcmp(data, php_sig_gd2, sizeof(php_sig_gd2))) {
|
||||
return PHP_GDIMG_TYPE_GD2;
|
||||
} else if (!memcmp(data, php_sig_jpg, 3)) {
|
||||
} else if (!memcmp(data, php_sig_jpg, sizeof(php_sig_jpg))) {
|
||||
return PHP_GDIMG_TYPE_JPG;
|
||||
} else if (!memcmp(data, php_sig_png, 3)) {
|
||||
if (!memcmp(data, php_sig_png, 8)) {
|
||||
return PHP_GDIMG_TYPE_PNG;
|
||||
}
|
||||
} else if (!memcmp(data, php_sig_gif, 3)) {
|
||||
} else if (!memcmp(data, php_sig_png, sizeof(php_sig_png))) {
|
||||
return PHP_GDIMG_TYPE_PNG;
|
||||
} else if (!memcmp(data, php_sig_gif, sizeof(php_sig_gif))) {
|
||||
return PHP_GDIMG_TYPE_GIF;
|
||||
} else if (!memcmp(data, php_sig_bmp, sizeof(php_sig_bmp))) {
|
||||
return PHP_GDIMG_TYPE_BMP;
|
||||
} else if(!memcmp(data, php_sig_riff, sizeof(php_sig_riff)) && !memcmp(data + sizeof(php_sig_riff) + sizeof(uint32_t), php_sig_webp, sizeof(php_sig_webp))) {
|
||||
return PHP_GDIMG_TYPE_WEBP;
|
||||
}
|
||||
else {
|
||||
gdIOCtx *io_ctx;
|
||||
@ -2294,19 +2294,19 @@ PHP_FUNCTION(imagecreatefromstring)
|
||||
zval *data;
|
||||
gdImagePtr im;
|
||||
int imtype;
|
||||
char sig[8];
|
||||
char sig[12];
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &data) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
convert_to_string_ex(data);
|
||||
if (Z_STRLEN_P(data) < 8) {
|
||||
if (Z_STRLEN_P(data) < sizeof(sig)) {
|
||||
php_error_docref(NULL, E_WARNING, "Empty string or invalid image");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
memcpy(sig, Z_STRVAL_P(data), 8);
|
||||
memcpy(sig, Z_STRVAL_P(data), sizeof(sig));
|
||||
|
||||
imtype = _php_image_type(sig);
|
||||
|
||||
@ -2345,6 +2345,15 @@ PHP_FUNCTION(imagecreatefromstring)
|
||||
im = _php_image_create_from_string(data, "BMP", gdImageCreateFromBmpCtx);
|
||||
break;
|
||||
|
||||
case PHP_GDIMG_TYPE_WEBP:
|
||||
#ifdef HAVE_GD_WEBP
|
||||
im = _php_image_create_from_string(data, "WEBP", gdImageCreateFromWebpCtx);
|
||||
break;
|
||||
#else
|
||||
php_error_docref(NULL, E_WARNING, "No WEBP support in this PHP build");
|
||||
RETURN_FALSE;
|
||||
#endif
|
||||
|
||||
default:
|
||||
php_error_docref(NULL, E_WARNING, "Data is not in a recognized format");
|
||||
RETURN_FALSE;
|
||||
|
@ -62,6 +62,8 @@ PHPAPI extern const char php_sig_gif[3];
|
||||
PHPAPI extern const char php_sig_jpg[3];
|
||||
PHPAPI extern const char php_sig_png[8];
|
||||
PHPAPI extern const char php_sig_bmp[2];
|
||||
PHPAPI extern const char php_sig_riff[4];
|
||||
PHPAPI extern const char php_sig_webp[4];
|
||||
|
||||
extern zend_module_entry gd_module_entry;
|
||||
#define phpext_gd_ptr &gd_module_entry
|
||||
|
@ -52,8 +52,8 @@ unlink($dir . '/p.png');
|
||||
|
||||
//empty string
|
||||
$im = imagecreatefromstring('');
|
||||
//random string > 8
|
||||
$im = imagecreatefromstring(' asdf jklp');
|
||||
//random string > 12
|
||||
$im = imagecreatefromstring(' asdf jklp foo');
|
||||
?>
|
||||
--EXPECTF--
|
||||
createfromstring truecolor png: ok
|
||||
|
BIN
ext/gd/tests/imagecreatefromstring.bmp
Normal file
BIN
ext/gd/tests/imagecreatefromstring.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 374 B |
BIN
ext/gd/tests/imagecreatefromstring.gif
Normal file
BIN
ext/gd/tests/imagecreatefromstring.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 B |
BIN
ext/gd/tests/imagecreatefromstring.webp
Normal file
BIN
ext/gd/tests/imagecreatefromstring.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 82 B |
20
ext/gd/tests/imagecreatefromstring_gif.phpt
Normal file
20
ext/gd/tests/imagecreatefromstring_gif.phpt
Normal file
@ -0,0 +1,20 @@
|
||||
--TEST--
|
||||
imagecreatefromstring() - GIF format
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('gd')) die('skip ext/gd required');
|
||||
if (!(imagetypes() & IMG_GIF)) die('skip GIF support required');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
// create an image from a GIF string representation
|
||||
$im = imagecreatefromstring(file_get_contents(__DIR__ . '/imagecreatefromstring.gif'));
|
||||
var_dump(imagesx($im));
|
||||
var_dump(imagesy($im));
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
int(10)
|
||||
int(10)
|
||||
===DONE===
|
20
ext/gd/tests/imagecreatefromstring_png.phpt
Normal file
20
ext/gd/tests/imagecreatefromstring_png.phpt
Normal file
@ -0,0 +1,20 @@
|
||||
--TEST--
|
||||
imagecreatefromstring() - PNG format
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('gd')) die('skip ext/gd required');
|
||||
if (!(imagetypes() & IMG_PNG)) die('skip PNG support required');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
// create an image from a PNG string representation
|
||||
$im = imagecreatefromstring(file_get_contents(__DIR__ . '/imagecreatefromstring.gif'));
|
||||
var_dump(imagesx($im));
|
||||
var_dump(imagesy($im));
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
int(10)
|
||||
int(10)
|
||||
===DONE===
|
20
ext/gd/tests/imagecreatefromstring_webp.phpt
Normal file
20
ext/gd/tests/imagecreatefromstring_webp.phpt
Normal file
@ -0,0 +1,20 @@
|
||||
--TEST--
|
||||
imagecreatefromstring() - WEBP format
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('gd')) die('skip ext/gd required');
|
||||
if (!(imagetypes() & IMG_WEBP)) die('skip WEBP support required');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
// create an image from a WEBP string representation
|
||||
$im = imagecreatefromstring(file_get_contents(__DIR__ . '/imagecreatefromstring.webp'));
|
||||
var_dump(imagesx($im));
|
||||
var_dump(imagesy($im));
|
||||
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
int(10)
|
||||
int(10)
|
||||
===DONE===
|
Loading…
Reference in New Issue
Block a user