mirror of
https://github.com/php/php-src.git
synced 2026-04-28 10:43:30 +02:00
Merge branch 'PHP-5.6'
* PHP-5.6: Fix #70052: getimagesize() fails for very large and very small WBMP Conflicts: ext/standard/image.c
This commit is contained in:
+18
-7
@@ -969,6 +969,10 @@ static int php_get_wbmp(php_stream *stream, struct gfxinfo **result, int check)
|
||||
return 0;
|
||||
}
|
||||
width = (width << 7) | (i & 0x7f);
|
||||
/* maximum valid width for wbmp (although 127 may be a more accurate one) */
|
||||
if (width > 2048) {
|
||||
return 0;
|
||||
}
|
||||
} while (i & 0x80);
|
||||
|
||||
/* get height */
|
||||
@@ -978,10 +982,13 @@ static int php_get_wbmp(php_stream *stream, struct gfxinfo **result, int check)
|
||||
return 0;
|
||||
}
|
||||
height = (height << 7) | (i & 0x7f);
|
||||
/* maximum valid heigth for wbmp (although 127 may be a more accurate one) */
|
||||
if (height > 2048) {
|
||||
return 0;
|
||||
}
|
||||
} while (i & 0x80);
|
||||
|
||||
/* maximum valid sizes for wbmp (although 127x127 may be a more accurate one) */
|
||||
if (!height || !width || height > 2048 || width > 2048) {
|
||||
if (!height || !width) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1223,6 +1230,7 @@ PHP_FUNCTION(image_type_to_extension)
|
||||
PHPAPI int php_getimagetype(php_stream * stream, char *filetype)
|
||||
{
|
||||
char tmp[12];
|
||||
int twelve_bytes_read;
|
||||
|
||||
if ( !filetype) filetype = tmp;
|
||||
if((php_stream_read(stream, filetype, 3)) != 3) {
|
||||
@@ -1273,12 +1281,11 @@ PHPAPI int php_getimagetype(php_stream * stream, char *filetype)
|
||||
return IMAGE_FILETYPE_ICO;
|
||||
}
|
||||
|
||||
if (php_stream_read(stream, filetype+4, 8) != 8) {
|
||||
php_error_docref(NULL, E_NOTICE, "Read error!");
|
||||
return IMAGE_FILETYPE_UNKNOWN;
|
||||
}
|
||||
/* WBMP may be smaller than 12 bytes, so delay error */
|
||||
twelve_bytes_read = (php_stream_read(stream, filetype+4, 8) == 8);
|
||||
|
||||
/* BYTES READ: 12 */
|
||||
if (!memcmp(filetype, php_sig_jp2, 12)) {
|
||||
if (twelve_bytes_read && !memcmp(filetype, php_sig_jp2, 12)) {
|
||||
return IMAGE_FILETYPE_JP2;
|
||||
}
|
||||
|
||||
@@ -1286,6 +1293,10 @@ PHPAPI int php_getimagetype(php_stream * stream, char *filetype)
|
||||
if (php_get_wbmp(stream, NULL, 1)) {
|
||||
return IMAGE_FILETYPE_WBMP;
|
||||
}
|
||||
if (!twelve_bytes_read) {
|
||||
php_error_docref(NULL, E_NOTICE, "Read error!");
|
||||
return IMAGE_FILETYPE_UNKNOWN;
|
||||
}
|
||||
if (php_get_xbm(stream, NULL)) {
|
||||
return IMAGE_FILETYPE_XBM;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
--TEST--
|
||||
Bug #70052 (getimagesize() fails for very large and very small WBMP)
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(getimagesize(__DIR__ . '/bug70052_1.wbmp'));
|
||||
var_dump(getimagesize(__DIR__ . '/bug70052_2.wbmp'));
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(false)
|
||||
array(5) {
|
||||
[0]=>
|
||||
int(3)
|
||||
[1]=>
|
||||
int(3)
|
||||
[2]=>
|
||||
int(15)
|
||||
[3]=>
|
||||
string(20) "width="3" height="3""
|
||||
["mime"]=>
|
||||
string(18) "image/vnd.wap.wbmp"
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user