summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-01-30 13:09:15 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-01-30 13:09:47 +0100
commit01d30f880a0f333650164a20bff52a77af9814d9 (patch)
tree4990e3ba4a22c5c66452118c0f6e728a5130d228
parentdfbeee034a24fe01166e69369c0df2d7921817f8 (diff)
downloadphp-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.c14
-rw-r--r--ext/date/tests/bug65672.phpt7
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"
+}