mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-11 19:20:50 +00:00
Compare commits
13
Commits
php-7.1.28
...
php-5.6.28
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1ee7933f64 | ||
|
|
7bded39b2f | ||
|
|
87bb51eb9f | ||
|
|
e43b3bff6a | ||
|
|
676b64e8f0 | ||
|
|
f14da6f0b0 | ||
|
|
18fef10644 | ||
|
|
b823b14e37 | ||
|
|
7c27d0329f | ||
|
|
dd8a2cc245 | ||
|
|
b433034feb | ||
|
|
0cd5cdeb04 | ||
|
|
c0891d9326 |
No files matched your search
@@ -1,17 +1,30 @@
|
||||
PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
?? ??? 2016, PHP 5.6.28
|
||||
10 Nov 2016, PHP 5.6.28
|
||||
|
||||
- Core:
|
||||
. Fixed bug #73337 (try/catch not working with two exceptions inside a same
|
||||
operation). (Dmitry)
|
||||
|
||||
- Bz2:
|
||||
. Fixed bug #73356 (crash in bzcompress function). (Stas)
|
||||
|
||||
-GD:
|
||||
. Fixed bug #73213 (Integer overflow in imageline() with antialiasing). (cmb)
|
||||
. Fixed bug #73272 (imagescale() is not affected by, but affects
|
||||
imagesetinterpolation()). (cmb)
|
||||
. Fixed bug #73279 (Integer overflow in gdImageScaleBilinearPalette()). (cmb)
|
||||
. Fixed bug #73280 (Stack Buffer Overflow in GD dynamicGetbuf). (cmb)
|
||||
. Fixed bug #72482 (Illegal write/read access caused by gdImageAALine overflow).
|
||||
(cmb)
|
||||
. Fixed bug #72696 (imagefilltoborder stackoverflow on truecolor images). (cmb)
|
||||
|
||||
- Imap:
|
||||
. Fixed bug #73418 (Integer Overflow in "_php_imap_mail" leads Heap Overflow).
|
||||
(Anatol)
|
||||
|
||||
- SPL:
|
||||
. Fixed bug #73144 (Use-after-free in ArrayObject Deserialization). (Stas)
|
||||
|
||||
- SOAP:
|
||||
. Fixed bug #73037 (SoapServer reports Bad Request when gzipped). (Anatol)
|
||||
@@ -23,6 +36,10 @@ PHP NEWS
|
||||
. Fixed bug #73203 (passing additional_parameters causes mail to fail). (cmb)
|
||||
. Fixed bug #73188 (use after free in userspace streams). (Sara)
|
||||
|
||||
- Wddx:
|
||||
. Fixed bug #73331 (NULL Pointer Dereference in WDDX Packet Deserialization
|
||||
with PDORow). (Stas)
|
||||
|
||||
13 Oct 2016, PHP 5.6.27
|
||||
|
||||
- Core:
|
||||
|
||||
@@ -667,6 +667,7 @@ END_EXTERN_C()
|
||||
} \
|
||||
RETVAL_STRINGL((s), (int)__len, (dup)); \
|
||||
} while (0)
|
||||
#define RETURN_STRINGL_CHECK(s, len, dup) { RETVAL_STRINGL_CHECK(s, len, dup); return; }
|
||||
|
||||
|
||||
#define SET_VAR_STRING(n, v) { \
|
||||
|
||||
+1
-1
@@ -120,7 +120,7 @@ int zend_sprintf(char *buffer, const char *format, ...);
|
||||
PHP_MAJOR_VERSION=5
|
||||
PHP_MINOR_VERSION=6
|
||||
PHP_RELEASE_VERSION=28
|
||||
PHP_EXTRA_VERSION="-dev"
|
||||
PHP_EXTRA_VERSION=""
|
||||
PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION"
|
||||
PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION`
|
||||
|
||||
|
||||
+2
-2
@@ -513,7 +513,7 @@ static PHP_FUNCTION(bzcompress)
|
||||
dest_len = (unsigned int) (source_len + (0.01 * source_len) + 600);
|
||||
|
||||
/* Allocate the destination buffer */
|
||||
dest = emalloc(dest_len + 1);
|
||||
dest = safe_emalloc(dest_len, 1, 1);
|
||||
|
||||
/* Handle the optional arguments */
|
||||
if (argc > 1) {
|
||||
@@ -533,7 +533,7 @@ static PHP_FUNCTION(bzcompress)
|
||||
so we erealloc() the buffer to the proper size */
|
||||
dest = erealloc(dest, dest_len + 1);
|
||||
dest[dest_len] = 0;
|
||||
RETURN_STRINGL(dest, dest_len, 0);
|
||||
RETURN_STRINGL_CHECK(dest, dest_len, 0);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
+4
-49
@@ -1117,7 +1117,7 @@ void gdImageLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
|
||||
}
|
||||
|
||||
/* 2.0.10: Nick Atty: clip to edges of drawing rectangle, return if no points need to be drawn */
|
||||
if (!clip_1d(&x1,&y1,&x2,&y2,gdImageSX(im)) || !clip_1d(&y1,&x1,&y2,&x2,gdImageSY(im))) {
|
||||
if (!clip_1d(&x1,&y1,&x2,&y2,gdImageSX(im)-1) || !clip_1d(&y1,&x1,&y2,&x2,gdImageSY(im)-1)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1301,55 +1301,10 @@ void gdImageAALine (gdImagePtr im, int x1, int y1, int x2, int y2, int col)
|
||||
long x, y, inc, frac;
|
||||
long dx, dy,tmp;
|
||||
|
||||
if (y1 < 0 && y2 < 0) {
|
||||
/* 2.0.10: Nick Atty: clip to edges of drawing rectangle, return if no points need to be drawn */
|
||||
if (!clip_1d(&x1,&y1,&x2,&y2,gdImageSX(im)-1) || !clip_1d(&y1,&x1,&y2,&x2,gdImageSY(im)-1)) {
|
||||
return;
|
||||
}
|
||||
if (y1 < 0) {
|
||||
x1 += (y1 * (x1 - x2)) / (y2 - y1);
|
||||
y1 = 0;
|
||||
}
|
||||
if (y2 < 0) {
|
||||
x2 += (y2 * (x1 - x2)) / (y2 - y1);
|
||||
y2 = 0;
|
||||
}
|
||||
|
||||
/* bottom edge */
|
||||
if (y1 >= im->sy && y2 >= im->sy) {
|
||||
return;
|
||||
}
|
||||
if (y1 >= im->sy) {
|
||||
x1 -= ((im->sy - y1) * (x1 - x2)) / (y2 - y1);
|
||||
y1 = im->sy - 1;
|
||||
}
|
||||
if (y2 >= im->sy) {
|
||||
x2 -= ((im->sy - y2) * (x1 - x2)) / (y2 - y1);
|
||||
y2 = im->sy - 1;
|
||||
}
|
||||
|
||||
/* left edge */
|
||||
if (x1 < 0 && x2 < 0) {
|
||||
return;
|
||||
}
|
||||
if (x1 < 0) {
|
||||
y1 += (x1 * (y1 - y2)) / (x2 - x1);
|
||||
x1 = 0;
|
||||
}
|
||||
if (x2 < 0) {
|
||||
y2 += (x2 * (y1 - y2)) / (x2 - x1);
|
||||
x2 = 0;
|
||||
}
|
||||
/* right edge */
|
||||
if (x1 >= im->sx && x2 >= im->sx) {
|
||||
return;
|
||||
}
|
||||
if (x1 >= im->sx) {
|
||||
y1 -= ((im->sx - x1) * (y1 - y2)) / (x2 - x1);
|
||||
x1 = im->sx - 1;
|
||||
}
|
||||
if (x2 >= im->sx) {
|
||||
y2 -= ((im->sx - x2) * (y1 - y2)) / (x2 - x1);
|
||||
x2 = im->sx - 1;
|
||||
}
|
||||
|
||||
dx = x2 - x1;
|
||||
dy = y2 - y1;
|
||||
@@ -1792,7 +1747,7 @@ void gdImageFillToBorder (gdImagePtr im, int x, int y, int border, int color)
|
||||
int leftLimit = -1, rightLimit;
|
||||
int i, restoreAlphaBlending = 0;
|
||||
|
||||
if (border < 0) {
|
||||
if (border < 0 || color < 0) {
|
||||
/* Refuse to fill to a non-solid border */
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
--TEST--
|
||||
Bug #72482 (Ilegal write/read access caused by gdImageAALine overflow)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('gd')) die('skip gd extension not available');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$img = imagecreatetruecolor(13, 1007);
|
||||
imageantialias($img, true);
|
||||
imageline($img, 0, 0, 1073745919, 1073745919, 4096);
|
||||
|
||||
$img = imagecreatetruecolor(100, 100);
|
||||
imageantialias($img, true);
|
||||
imageline($img, 1094795585, 0, 2147483647, 255, 0xff);
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
===DONE===
|
||||
@@ -0,0 +1,21 @@
|
||||
--TEST--
|
||||
Bug 72482 (Ilegal write/read access caused by gdImageAALine overflow)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('gd')) die('skip gd extension not available');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once __DIR__ . DIRECTORY_SEPARATOR . 'func.inc';
|
||||
|
||||
$im = imagecreatetruecolor(10, 10);
|
||||
imagefilledrectangle($im, 0, 0, 9, 9, imagecolorallocate($im, 255, 255, 255));
|
||||
imageantialias($im, true);
|
||||
imageline($im, 0, 0, 10, 10, imagecolorallocate($im, 0, 0, 0));
|
||||
|
||||
test_image_equals_file(__DIR__ . DIRECTORY_SEPARATOR . 'bug72482_2.png', $im);
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
The images are equal.
|
||||
===DONE===
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 118 B |
@@ -0,0 +1,14 @@
|
||||
--TEST--
|
||||
Bug #72696 (imagefilltoborder stackoverflow on truecolor images)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('gd')) die('skip gd extension not available');
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
$im = imagecreatetruecolor(10, 10);
|
||||
imagefilltoborder($im, 0, 0, 1, -2);
|
||||
?>
|
||||
===DONE===
|
||||
--EXPECT--
|
||||
===DONE===
|
||||
+1
-1
@@ -2491,7 +2491,7 @@ PHP_NAMED_FUNCTION(php_if_iconv)
|
||||
&out_buffer, &out_len, out_charset, in_charset);
|
||||
_php_iconv_show_error(err, out_charset, in_charset TSRMLS_CC);
|
||||
if (err == PHP_ICONV_ERR_SUCCESS && out_buffer != NULL) {
|
||||
RETVAL_STRINGL(out_buffer, out_len, 0);
|
||||
RETVAL_STRINGL_CHECK(out_buffer, out_len, 0);
|
||||
} else {
|
||||
if (out_buffer != NULL) {
|
||||
efree(out_buffer);
|
||||
|
||||
+2
-2
@@ -3900,7 +3900,7 @@ int _php_imap_mail(char *to, char *subject, char *message, char *headers, char *
|
||||
char *tsm_errmsg = NULL;
|
||||
ADDRESS *addr;
|
||||
char *bufferTo = NULL, *bufferCc = NULL, *bufferBcc = NULL, *bufferHeader = NULL;
|
||||
int offset, bufferLen = 0;
|
||||
size_t offset, bufferLen = 0;
|
||||
size_t bt_len;
|
||||
|
||||
if (headers) {
|
||||
@@ -3916,7 +3916,7 @@ int _php_imap_mail(char *to, char *subject, char *message, char *headers, char *
|
||||
#define PHP_IMAP_CLEAN if (bufferTo) efree(bufferTo); if (bufferCc) efree(bufferCc); if (bufferBcc) efree(bufferBcc); if (bufferHeader) efree(bufferHeader);
|
||||
#define PHP_IMAP_BAD_DEST PHP_IMAP_CLEAN; efree(tempMailTo); return (BAD_MSG_DESTINATION);
|
||||
|
||||
bufferHeader = (char *)emalloc(bufferLen + 1);
|
||||
bufferHeader = (char *)safe_emalloc(bufferLen, 1, 1);
|
||||
memset(bufferHeader, 0, bufferLen);
|
||||
if (to && *to) {
|
||||
strlcat(bufferHeader, "To: ", bufferLen + 1);
|
||||
|
||||
@@ -182,7 +182,7 @@ static void _breakiterator_parts_move_forward(zend_object_iterator *iter TSRMLS_
|
||||
}
|
||||
assert(next <= slen && next >= cur);
|
||||
len = next - cur;
|
||||
res = static_cast<char*>(emalloc(len + 1));
|
||||
res = static_cast<char*>(safe_emalloc(len, 1, 1));
|
||||
|
||||
memcpy(res, &s[cur], len);
|
||||
res[len] = '\0';
|
||||
|
||||
@@ -49,7 +49,7 @@ void intl_convert_utf8_to_utf16(
|
||||
UErrorCode* status )
|
||||
{
|
||||
UChar* dst_buf = NULL;
|
||||
int32_t dst_len = 0;
|
||||
uint32_t dst_len = 0;
|
||||
|
||||
/* If *target is NULL determine required destination buffer size (pre-flighting).
|
||||
* Otherwise, attempt to convert source string; if *target buffer is not large enough
|
||||
|
||||
@@ -263,6 +263,9 @@ static char* get_icu_value_internal( const char* loc_name , char* tag_name, int*
|
||||
int32_t buflen = 512;
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
|
||||
if (strlen(loc_name) > INTL_MAX_LOCALE_LEN) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if( strcmp(tag_name, LOC_CANONICALIZE_TAG) != 0 ){
|
||||
/* Handle grandfathered languages */
|
||||
@@ -395,7 +398,7 @@ static void get_icu_value_src_php( char* tag_name, INTERNAL_FUNCTION_PARAMETERS)
|
||||
if(loc_name_len == 0) {
|
||||
loc_name = intl_locale_get_default(TSRMLS_C);
|
||||
}
|
||||
|
||||
|
||||
INTL_CHECK_LOCALE_LEN(strlen(loc_name));
|
||||
|
||||
/* Call ICU get */
|
||||
@@ -702,6 +705,8 @@ PHP_FUNCTION( locale_get_keywords )
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
INTL_CHECK_LOCALE_LEN(strlen(loc_name));
|
||||
|
||||
if(loc_name_len == 0) {
|
||||
loc_name = intl_locale_get_default(TSRMLS_C);
|
||||
}
|
||||
@@ -1109,6 +1114,8 @@ PHP_FUNCTION(locale_parse)
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
INTL_CHECK_LOCALE_LEN(strlen(loc_name));
|
||||
|
||||
if(loc_name_len == 0) {
|
||||
loc_name = intl_locale_get_default(TSRMLS_C);
|
||||
}
|
||||
|
||||
@@ -80,10 +80,10 @@ msgformat_data* msgformat_data_create( TSRMLS_D )
|
||||
/* }}} */
|
||||
|
||||
#ifdef MSG_FORMAT_QUOTE_APOS
|
||||
int msgformat_fix_quotes(UChar **spattern, uint32_t *spattern_len, UErrorCode *ec)
|
||||
int msgformat_fix_quotes(UChar **spattern, uint32_t *spattern_len, UErrorCode *ec)
|
||||
{
|
||||
if(*spattern && *spattern_len && u_strchr(*spattern, (UChar)'\'')) {
|
||||
UChar *npattern = emalloc(sizeof(UChar)*(2*(*spattern_len)+1));
|
||||
UChar *npattern = safe_emalloc(sizeof(UChar)*2, *spattern_len, sizeof(UChar));
|
||||
uint32_t npattern_len;
|
||||
npattern_len = umsg_autoQuoteApostrophe(*spattern, *spattern_len, npattern, 2*(*spattern_len)+1, ec);
|
||||
efree(*spattern);
|
||||
|
||||
@@ -2338,6 +2338,7 @@ void pdo_stmt_init(TSRMLS_D)
|
||||
pdo_row_ce->ce_flags |= ZEND_ACC_FINAL_CLASS; /* when removing this a lot of handlers need to be redone */
|
||||
pdo_row_ce->create_object = pdo_row_new;
|
||||
pdo_row_ce->serialize = pdo_row_serialize;
|
||||
pdo_row_ce->unserialize = zend_class_unserialize_deny;
|
||||
}
|
||||
|
||||
static void free_statement(pdo_stmt_t *stmt TSRMLS_DC)
|
||||
|
||||
+1
-1
@@ -1812,7 +1812,7 @@ SPL_METHOD(Array, unserialize)
|
||||
ALLOC_INIT_ZVAL(intern->array);
|
||||
if (!php_var_unserialize(&intern->array, &p, s + buf_len, &var_hash TSRMLS_CC)
|
||||
|| (Z_TYPE_P(intern->array) != IS_ARRAY && Z_TYPE_P(intern->array) != IS_OBJECT)) {
|
||||
zval_ptr_dtor(&intern->array);
|
||||
// zval_ptr_dtor(&intern->array);
|
||||
goto outexcept;
|
||||
}
|
||||
var_push_dtor(&var_hash, &intern->array);
|
||||
|
||||
+5
-5
@@ -133,7 +133,7 @@ PHPAPI int php_exec(int type, char *cmd, zval *array, zval *return_value TSRMLS_
|
||||
|
||||
if (type != 3) {
|
||||
b = buf;
|
||||
|
||||
|
||||
while (php_stream_get_line(stream, b, EXEC_INPUT_BUF, &bufl)) {
|
||||
/* no new line found, let's read some more */
|
||||
if (b[bufl - 1] != '\n' && !php_stream_eof(stream)) {
|
||||
@@ -330,7 +330,7 @@ PHPAPI char *php_escape_shell_cmd(char *str)
|
||||
cmd[y++] = str[x];
|
||||
break;
|
||||
#else
|
||||
/* % is Windows specific for enviromental variables, ^%PATH% will
|
||||
/* % is Windows specific for enviromental variables, ^%PATH% will
|
||||
output PATH while ^%PATH^% will not. escapeshellcmd will escape all % and !.
|
||||
*/
|
||||
case '%':
|
||||
@@ -492,7 +492,7 @@ PHP_FUNCTION(escapeshellcmd)
|
||||
return;
|
||||
}
|
||||
cmd = php_escape_shell_cmd(command);
|
||||
RETVAL_STRING(cmd, 0);
|
||||
RETVAL_STRINGL_CHECK(cmd, strlen(cmd), 0);
|
||||
} else {
|
||||
RETVAL_EMPTY_STRING();
|
||||
}
|
||||
@@ -517,7 +517,7 @@ PHP_FUNCTION(escapeshellarg)
|
||||
return;
|
||||
}
|
||||
cmd = php_escape_shell_arg(argument);
|
||||
RETVAL_STRING(cmd, 0);
|
||||
RETVAL_STRINGL_CHECK(cmd, strlen(cmd), 0);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
@@ -551,7 +551,7 @@ PHP_FUNCTION(shell_exec)
|
||||
php_stream_close(stream);
|
||||
|
||||
if (total_readbytes > 0) {
|
||||
RETVAL_STRINGL(ret, total_readbytes, 0);
|
||||
RETVAL_STRINGL_CHECK(ret, total_readbytes, 0);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -57,7 +57,8 @@
|
||||
newlen = (n); \
|
||||
(d)->a = newlen < SMART_STR_START_SIZE \
|
||||
? SMART_STR_START_SIZE \
|
||||
: newlen + SMART_STR_PREALLOC; \
|
||||
: (newlen >= (INT_MAX - SMART_STR_PREALLOC)? newlen \
|
||||
: (newlen + SMART_STR_PREALLOC)); \
|
||||
SMART_STR_DO_REALLOC(d, what); \
|
||||
} else { \
|
||||
newlen = (d)->len + (n); \
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
--TEST--
|
||||
Bug #73144 (Use-afte-free in ArrayObject Deserialization)
|
||||
--FILE--
|
||||
<?php
|
||||
try {
|
||||
$token = 'a:2:{i:0;O:1:"0":2:0s:1:"0";i:0;s:1:"0";a:1:{i:0;C:11:"ArrayObject":7:0x:i:0;r0';
|
||||
$obj = unserialize($token);
|
||||
} catch(Exception $e) {
|
||||
echo $e->getMessage()."\n";
|
||||
}
|
||||
|
||||
try {
|
||||
$inner = 'x:i:1;O:8:"stdClass":1:{};m:a:0:{}';
|
||||
$exploit = 'C:11:"ArrayObject":'.strlen($inner).':{'.$inner.'}';
|
||||
unserialize($exploit);
|
||||
} catch(Exception $e) {
|
||||
echo $e->getMessage()."\n";
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Error at offset 6 of 7 bytes
|
||||
|
||||
Notice: ArrayObject::unserialize(): Unexpected end of serialized data in %sbug73341.php on line %d
|
||||
Error at offset 24 of 34 bytes
|
||||
@@ -13,4 +13,4 @@ fopen('mystream://foo', 'r');
|
||||
echo 'Done';
|
||||
|
||||
--EXPECTF--
|
||||
Fatal error: Call to undefined function _some_undefined_function() in %s/user-stream-error.php on line %d
|
||||
Fatal error: Call to undefined function _some_undefined_function() in %s%euser-stream-error.php on line %d
|
||||
@@ -14,5 +14,7 @@ echo wddx_serialize_value($xml, 'Variables') . "\n";
|
||||
echo "DONE";
|
||||
?>
|
||||
--EXPECTF--
|
||||
<wddxPacket version='1.0'><header><comment>Variables</comment></header><data><struct><var name='php_class_name'><string>SimpleXMLElement</string></var><var name='test'><struct><var name='php_class_name'><string>SimpleXMLElement</string></var></struct></var></struct></data></wddxPacket>
|
||||
|
||||
Warning: wddx_serialize_value(): Class SimpleXMLElement can not be serialized in %sbug45901.php on line %d
|
||||
<wddxPacket version='1.0'><header><comment>Variables</comment></header><data></data></wddxPacket>
|
||||
DONE
|
||||
@@ -1,5 +1,5 @@
|
||||
--TEST--
|
||||
Bug 72790: wddx_deserialize null dereference with invalid xml
|
||||
Bug #72790: wddx_deserialize null dereference with invalid xml
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('wddx')) {
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
Bug #73331 (NULL Pointer Dereference in WDDX Packet Deserialization with PDORow)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("wddx") || !extension_loaded("pdo")) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$wddx = "<wddxPacket version='1.0'><header/><data><struct><var name='php_class_name'><string>PDORow</string></var></struct></data></wddxPacket>";
|
||||
var_dump(wddx_deserialize($wddx));
|
||||
?>
|
||||
--EXPECTF--
|
||||
|
||||
Warning: wddx_deserialize(): Class pdorow can not be unserialized in %s73331.php on line %d
|
||||
NULL
|
||||
|
||||
+34
-30
@@ -471,21 +471,26 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
|
||||
ulong idx;
|
||||
char tmp_buf[WDDX_BUF_LEN];
|
||||
HashTable *objhash, *sleephash;
|
||||
zend_class_entry *ce;
|
||||
PHP_CLASS_ATTRIBUTES;
|
||||
TSRMLS_FETCH();
|
||||
|
||||
PHP_SET_CLASS_ATTRIBUTES(obj);
|
||||
ce = Z_OBJCE_P(obj);
|
||||
if (!ce || ce->serialize || ce->unserialize) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Class %s can not be serialized", class_name);
|
||||
PHP_CLEANUP_CLASS_ATTRIBUTES();
|
||||
return;
|
||||
}
|
||||
|
||||
MAKE_STD_ZVAL(fname);
|
||||
ZVAL_STRING(fname, "__sleep", 1);
|
||||
|
||||
/*
|
||||
* We try to call __sleep() method on object. It's supposed to return an
|
||||
* array of property names to be serialized.
|
||||
*/
|
||||
if (call_user_function_ex(CG(function_table), &obj, fname, &retval, 0, 0, 1, NULL TSRMLS_CC) == SUCCESS) {
|
||||
if (retval && (sleephash = HASH_OF(retval))) {
|
||||
PHP_CLASS_ATTRIBUTES;
|
||||
|
||||
PHP_SET_CLASS_ATTRIBUTES(obj);
|
||||
|
||||
php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
|
||||
snprintf(tmp_buf, WDDX_BUF_LEN, WDDX_VAR_S, PHP_CLASS_NAME_VAR);
|
||||
php_wddx_add_chunk(packet, tmp_buf);
|
||||
@@ -494,8 +499,6 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
|
||||
php_wddx_add_chunk_static(packet, WDDX_STRING_E);
|
||||
php_wddx_add_chunk_static(packet, WDDX_VAR_E);
|
||||
|
||||
PHP_CLEANUP_CLASS_ATTRIBUTES();
|
||||
|
||||
objhash = HASH_OF(obj);
|
||||
|
||||
for (zend_hash_internal_pointer_reset(sleephash);
|
||||
@@ -516,10 +519,6 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
|
||||
} else {
|
||||
uint key_len;
|
||||
|
||||
PHP_CLASS_ATTRIBUTES;
|
||||
|
||||
PHP_SET_CLASS_ATTRIBUTES(obj);
|
||||
|
||||
php_wddx_add_chunk_static(packet, WDDX_STRUCT_S);
|
||||
snprintf(tmp_buf, WDDX_BUF_LEN, WDDX_VAR_S, PHP_CLASS_NAME_VAR);
|
||||
php_wddx_add_chunk(packet, tmp_buf);
|
||||
@@ -528,8 +527,6 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
|
||||
php_wddx_add_chunk_static(packet, WDDX_STRING_E);
|
||||
php_wddx_add_chunk_static(packet, WDDX_VAR_E);
|
||||
|
||||
PHP_CLEANUP_CLASS_ATTRIBUTES();
|
||||
|
||||
objhash = HASH_OF(obj);
|
||||
for (zend_hash_internal_pointer_reset(objhash);
|
||||
zend_hash_get_current_data(objhash, (void**)&ent) == SUCCESS;
|
||||
@@ -551,6 +548,8 @@ static void php_wddx_serialize_object(wddx_packet *packet, zval *obj)
|
||||
php_wddx_add_chunk_static(packet, WDDX_STRUCT_E);
|
||||
}
|
||||
|
||||
PHP_CLEANUP_CLASS_ATTRIBUTES();
|
||||
|
||||
zval_dtor(fname);
|
||||
FREE_ZVAL(fname);
|
||||
|
||||
@@ -1012,26 +1011,31 @@ static void php_wddx_pop_element(void *user_data, const XML_Char *name)
|
||||
pce = &PHP_IC_ENTRY;
|
||||
}
|
||||
|
||||
/* Initialize target object */
|
||||
MAKE_STD_ZVAL(obj);
|
||||
object_init_ex(obj, *pce);
|
||||
if (pce != &PHP_IC_ENTRY && ((*pce)->serialize || (*pce)->unserialize)) {
|
||||
zval_ptr_dtor(&ent2->data);
|
||||
ent2->data = NULL;
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Class %s can not be unserialized", Z_STRVAL_P(ent1->data));
|
||||
} else {
|
||||
/* Initialize target object */
|
||||
MAKE_STD_ZVAL(obj);
|
||||
object_init_ex(obj, *pce);
|
||||
|
||||
/* Merge current hashtable with object's default properties */
|
||||
zend_hash_merge(Z_OBJPROP_P(obj),
|
||||
Z_ARRVAL_P(ent2->data),
|
||||
(void (*)(void *)) zval_add_ref,
|
||||
(void *) &tmp, sizeof(zval *), 0);
|
||||
/* Merge current hashtable with object's default properties */
|
||||
zend_hash_merge(Z_OBJPROP_P(obj),
|
||||
Z_ARRVAL_P(ent2->data),
|
||||
(void (*)(void *)) zval_add_ref,
|
||||
(void *) &tmp, sizeof(zval *), 0);
|
||||
|
||||
if (incomplete_class) {
|
||||
php_store_class_name(obj, Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data));
|
||||
if (incomplete_class) {
|
||||
php_store_class_name(obj, Z_STRVAL_P(ent1->data), Z_STRLEN_P(ent1->data));
|
||||
}
|
||||
|
||||
/* Clean up old array entry */
|
||||
zval_ptr_dtor(&ent2->data);
|
||||
|
||||
/* Set stack entry to point to the newly created object */
|
||||
ent2->data = obj;
|
||||
}
|
||||
|
||||
/* Clean up old array entry */
|
||||
zval_ptr_dtor(&ent2->data);
|
||||
|
||||
/* Set stack entry to point to the newly created object */
|
||||
ent2->data = obj;
|
||||
|
||||
/* Clean up class name var entry */
|
||||
zval_ptr_dtor(&ent1->data);
|
||||
} else if (Z_TYPE_P(ent2->data) == IS_OBJECT) {
|
||||
|
||||
@@ -15,6 +15,7 @@ static const char rcsid[] = "#(@) $Id$";
|
||||
/* ENCODE -- Encode binary file into base64. */
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "base64.h"
|
||||
|
||||
@@ -31,6 +32,9 @@ void buffer_new(struct buffer_st *b)
|
||||
|
||||
void buffer_add(struct buffer_st *b, char c)
|
||||
{
|
||||
if ((INT_MAX - b->length) <= 512) {
|
||||
return;
|
||||
}
|
||||
*(b->ptr++) = c;
|
||||
b->offset++;
|
||||
if (b->offset == b->length) {
|
||||
@@ -54,13 +58,13 @@ void base64_encode_xmlrpc(struct buffer_st *b, const char *source, int length)
|
||||
int i, hiteof = 0;
|
||||
int offset = 0;
|
||||
int olen;
|
||||
|
||||
|
||||
olen = 0;
|
||||
|
||||
|
||||
buffer_new(b);
|
||||
|
||||
|
||||
/* Fill dtable with character encodings. */
|
||||
|
||||
|
||||
for (i = 0; i < 26; i++) {
|
||||
dtable[i] = 'A' + i;
|
||||
dtable[26 + i] = 'a' + i;
|
||||
@@ -70,16 +74,16 @@ void base64_encode_xmlrpc(struct buffer_st *b, const char *source, int length)
|
||||
}
|
||||
dtable[62] = '+';
|
||||
dtable[63] = '/';
|
||||
|
||||
|
||||
while (!hiteof) {
|
||||
unsigned char igroup[3], ogroup[4];
|
||||
int c, n;
|
||||
|
||||
|
||||
igroup[0] = igroup[1] = igroup[2] = 0;
|
||||
for (n = 0; n < 3; n++) {
|
||||
c = *(source++);
|
||||
offset++;
|
||||
if (offset > length) {
|
||||
if (offset > length || offset <= 0) {
|
||||
hiteof = 1;
|
||||
break;
|
||||
}
|
||||
@@ -90,11 +94,11 @@ void base64_encode_xmlrpc(struct buffer_st *b, const char *source, int length)
|
||||
ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)];
|
||||
ogroup[2] = dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)];
|
||||
ogroup[3] = dtable[igroup[2] & 0x3F];
|
||||
|
||||
|
||||
/* Replace characters in output stream with "=" pad
|
||||
characters if fewer than three characters were
|
||||
read from the end of the input stream. */
|
||||
|
||||
|
||||
if (n < 3) {
|
||||
ogroup[3] = '=';
|
||||
if (n < 2) {
|
||||
|
||||
@@ -80,6 +80,7 @@ static const char rcsid[] = "#(@) $Id$";
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include "simplestring.h"
|
||||
|
||||
#define my_free(thing) if(thing) {free(thing); thing = 0;}
|
||||
@@ -200,7 +201,7 @@ void simplestring_addn(simplestring* target, const char* source, size_t add_len)
|
||||
simplestring_init_str(target);
|
||||
}
|
||||
|
||||
if((SIZE_MAX - add_len) < target->len || (SIZE_MAX - add_len - 1) < target->len) {
|
||||
if((INT_MAX - add_len) < target->len || (INT_MAX - add_len - 1) < target->len) {
|
||||
/* check for overflows, if there's a potential overflow do nothing */
|
||||
return;
|
||||
}
|
||||
|
||||
+3
-3
@@ -1701,7 +1701,7 @@ static ZIPARCHIVE_METHOD(addEmptyDir)
|
||||
}
|
||||
|
||||
if (dirname[dirname_len-1] != '/') {
|
||||
s=(char *)emalloc(dirname_len+2);
|
||||
s=(char *)safe_emalloc(dirname_len, 1, 2);
|
||||
strcpy(s, dirname);
|
||||
s[dirname_len] = '/';
|
||||
s[dirname_len+1] = '\0';
|
||||
@@ -1915,14 +1915,14 @@ static ZIPARCHIVE_METHOD(addFromString)
|
||||
|
||||
ze_obj = (ze_zip_object*) zend_object_store_get_object(this TSRMLS_CC);
|
||||
if (ze_obj->buffers_cnt) {
|
||||
ze_obj->buffers = (char **)erealloc(ze_obj->buffers, sizeof(char *) * (ze_obj->buffers_cnt+1));
|
||||
ze_obj->buffers = (char **)safe_erealloc(ze_obj->buffers, sizeof(char *), (ze_obj->buffers_cnt+1), 0);
|
||||
pos = ze_obj->buffers_cnt++;
|
||||
} else {
|
||||
ze_obj->buffers = (char **)emalloc(sizeof(char *));
|
||||
ze_obj->buffers_cnt++;
|
||||
pos = 0;
|
||||
}
|
||||
ze_obj->buffers[pos] = (char *)emalloc(buffer_len + 1);
|
||||
ze_obj->buffers[pos] = (char *)safe_emalloc(buffer_len, 1, 1);
|
||||
memcpy(ze_obj->buffers[pos], buffer, buffer_len + 1);
|
||||
|
||||
zs = zip_source_buffer(intern, ze_obj->buffers[pos], buffer_len, 0);
|
||||
|
||||
+1
-1
@@ -673,7 +673,7 @@ static PHP_FUNCTION(name) \
|
||||
if (SUCCESS != php_zlib_encode(in_buf, in_len, &out_buf, &out_len, encoding, level TSRMLS_CC)) { \
|
||||
RETURN_FALSE; \
|
||||
} \
|
||||
RETURN_STRINGL(out_buf, out_len, 0); \
|
||||
RETVAL_STRINGL_CHECK(out_buf, out_len, 0); \
|
||||
}
|
||||
|
||||
#define PHP_ZLIB_DECODE_FUNC(name, encoding) \
|
||||
|
||||
+2
-2
@@ -3,6 +3,6 @@
|
||||
#define PHP_MAJOR_VERSION 5
|
||||
#define PHP_MINOR_VERSION 6
|
||||
#define PHP_RELEASE_VERSION 28
|
||||
#define PHP_EXTRA_VERSION "-dev"
|
||||
#define PHP_VERSION "5.6.28-dev"
|
||||
#define PHP_EXTRA_VERSION ""
|
||||
#define PHP_VERSION "5.6.28"
|
||||
#define PHP_VERSION_ID 50628
|
||||
Reference in new issue
Block a user