diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-01-30 13:09:15 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-01-30 13:09:47 +0100 |
commit | 01d30f880a0f333650164a20bff52a77af9814d9 (patch) | |
tree | 4990e3ba4a22c5c66452118c0f6e728a5130d228 | |
parent | dfbeee034a24fe01166e69369c0df2d7921817f8 (diff) | |
download | php-git-01d30f880a0f333650164a20bff52a77af9814d9.tar.gz |
Fix DatePeriod property handling with indirect modification
We do need to implement get_property_ptr_ptr to make arrays work
correctly.
-rw-r--r-- | ext/date/php_date.c | 14 | ||||
-rw-r--r-- | ext/date/tests/bug65672.phpt | 7 |
2 files changed, 17 insertions, 4 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c index db04b53c34..5e70ffc10d 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -5423,15 +5423,21 @@ static zval *date_period_write_property(zval *object, zval *member, zval *value, } zend_string_release(name); - std_object_handlers.write_property(object, member, value, cache_slot); - return value; + return zend_std_write_property(object, member, value, cache_slot); } /* }}} */ /* {{{ date_period_get_property_ptr_ptr */ static zval *date_period_get_property_ptr_ptr(zval *object, zval *member, int type, void **cache_slot) { - /* Fall back to read_property handler. */ - return NULL; + zend_string *name = zval_get_string(member); + if (date_period_is_magic_property(name)) { + zend_throw_error(NULL, "Retrieval of DatePeriod->%s for modification is unsupported", ZSTR_VAL(name)); + zend_string_release(name); + return &EG(error_zval); + } + zend_string_release(name); + + return zend_std_get_property_ptr_ptr(object, member, type, cache_slot); } /* }}} */ diff --git a/ext/date/tests/bug65672.phpt b/ext/date/tests/bug65672.phpt index a84cff69ae..a01287d9b4 100644 --- a/ext/date/tests/bug65672.phpt +++ b/ext/date/tests/bug65672.phpt @@ -28,6 +28,9 @@ $period->dynamic2 = []; $period->dynamic2[] = "array"; var_dump($period->dynamic2); +$period->dynamic3[] = "array"; +var_dump($period->dynamic3); + ?> --EXPECT-- string(5) "stuff" @@ -42,3 +45,7 @@ array(1) { [0]=> string(5) "array" } +array(1) { + [0]=> + string(5) "array" +} |