com php-src: Fix bug #73144 and bug #73341 - remove extra dtor: ext/spl/spl_array.c ext/standard/tests/serialize/bug7 3341.phpt

From: Date: Mon, 24 Oct 2016 05:03:16 +0000
Subject: com php-src: Fix bug #73144 and bug #73341 - remove extra dtor: ext/spl/spl_array.c ext/standard/tests/serialize/bug7 3341.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-95432@lists.php.net to get a copy of this message
Commit: f74d7d92c8bc1edc2505e0b58546217e9e1ecb40 Author: Stanislav Malyshev <stas@php.net> Sun, 23 Oct 2016 21:56:35 -0700 Parents: 6045de69c7dedcba3eadf7c4bba424b19c81d00d Branches: PHP-5.6 PHP-7.0 PHP-7.1 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=f74d7d92c8bc1edc2505e0b58546217e9e1ecb40 Log: Fix bug #73144 and bug #73341 - remove extra dtor Bugs: https://bugs.php.net/73144 https://bugs.php.net/73341 Changed paths: M ext/spl/spl_array..c A ext/standard/tests/serialize/bug73341.phpt Diff: diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 700d609..e7cbd1f 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -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); diff --git a/ext/standard/tests/serialize/bug73341.phpt b/ext/standard/tests/serialize/bug73341.phpt new file mode 100644 index 0000000..5542321 --- /dev/null +++ b/ext/standard/tests/serialize/bug73341.phpt @@ -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 \ No newline at end of file

« previous php.cvs (#95432) next »