com php-src: Fixed bug #75573 (Segmentation fault in 7.1.12 and 7.0.26): NEWS Zend/tests/bug75573.phpt Zend/zend_object_handlers.c

From: Date: Wed, 29 Nov 2017 06:46:21 +0000
Subject: com php-src: Fixed bug #75573 (Segmentation fault in 7.1.12 and 7.0.26): NEWS Zend/tests/bug75573.phpt Zend/zend_object_handlers.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-100435@lists.php.net to get a copy of this message
Commit: 3b9ba7b6bd9e24bdbeca8e8e3f24cee2fccc51d8 Author: Xinchen Hui <laruence@gmail.com> Wed, 29 Nov 2017 14:46:21 +0800 Parents: 6ed242dfc84a9e58f6e03184d99611f2cfb2a265 Branches: PHP-7.1 PHP-7.2 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=3b9ba7b6bd9e24bdbeca8e8e3f24cee2fccc51d8 Log: Fixed bug #75573 (Segmentation fault in 7.1.12 and 7.0.26) Bugs: https://bugs.php.net/75573 Changed paths: M NEWS A Zend/tests/bug75573.phpt M Zend/zend_object_handlers.c Diff: diff --git a/NEWS b/NEWS index 6fa8100..310047e 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ PHP NEWS ?? ??? 2017, PHP 7.1.13 - Core: + . Fixed bug #75573 (Segmentation fault in 7.1.12 and 7.0.26). (Laruence) . Fixed bug #75384 (PHP seems incompatible with OneDrive files on demand). (Anatol) . Fixed bug #74862 (Unable to clone instance when private __clone defined). diff --git a/Zend/tests/bug75573.phpt b/Zend/tests/bug75573.phpt new file mode 100644 index 0000000..476ff6e --- /dev/null +++ b/Zend/tests/bug75573.phpt @@ -0,0 +1,64 @@ +--TEST-- +Bug #75573 (Segmentation fault in 7.1.12 and 7.0.26) +--FILE-- +<?php + +class A +{ + var $_stdObject; + function initialize($properties = FALSE) { + $this->_stdObject = $properties ? (object) $properties : new stdClass(); + parent::initialize(); + } + function &__get($property) + { + if (isset($this->_stdObject->{$property})) { + $retval =& $this->_stdObject->{$property}; + return $retval; + } else { + return NULL; + } + } + function &__set($property, $value) + { + return $this->_stdObject->{$property} = $value; + } + function __isset($property_name) + { + return isset($this->_stdObject->{$property_name}); + } +} + +class B extends A +{ + function initialize($properties = array()) + { + parent::initialize($properties); + } + function &__get($property) + { + if (isset($this->settings) && isset($this->settings[$property])) { + $retval =& $this->settings[$property]; + return $retval; + } else { + return parent::__get($property); + } + } +} + +$b = new B(); +$b->settings = [ "foo" => "bar", "name" => "abc" ]; +var_dump($b->name); +var_dump($b->settings); +?> +--EXPECTF-- +Warning: Creating default object from empty value in %sbug75573.php on line %d + +Notice: Only variable references should be returned by reference in %sbug75573.php on line %d +string(3) "abc" +array(2) { + ["foo"]=> + string(3) "bar" + ["name"]=> + string(3) "abc" +} diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 10045b5..d9ebd84 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -668,13 +668,11 @@ zval *zend_std_read_property(zval *object, zval *member, int type, void **cache_ } zval_ptr_dtor(&tmp_object); goto exit; - } else { + } else if (Z_STRVAL_P(member)[0] == '\0' && Z_STRLEN_P(member) != 0) { zval_ptr_dtor(&tmp_object); - if (Z_STRVAL_P(member)[0] == '\0' && Z_STRLEN_P(member) != 0) { - zend_throw_error(NULL, "Cannot access property started with '\\0'"); - retval = &EG(uninitialized_zval); - goto exit; - } + zend_throw_error(NULL, "Cannot access property started with '\\0'"); + retval = &EG(uninitialized_zval); + goto exit; } }

« previous php.cvs (#100435) next »