summaryrefslogtreecommitdiff
path: root/ext/date/php_date.c
diff options
context:
space:
mode:
authorCraig Duncan <duncan3dc@php.net>2019-05-30 18:55:55 +0100
committerCraig Duncan <duncan3dc@php.net>2019-05-30 18:55:55 +0100
commit370997fb5d2d6d2248064a6047d25d7794118470 (patch)
tree8f5d84063ebb9c0ef9f3c3e4670bd254caea30e9 /ext/date/php_date.c
parent61a38bb2743ef2e76278aeeec9ec486b75e94485 (diff)
parent8b53c7232e2dae1af675e9e280e7e89f2758bda1 (diff)
downloadphp-git-370997fb5d2d6d2248064a6047d25d7794118470.tar.gz
Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2: Add a test for bug #65672 Ensure the internal properties cannot be overwritten
Diffstat (limited to 'ext/date/php_date.c')
-rw-r--r--ext/date/php_date.c37
1 files changed, 34 insertions, 3 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 6bc5936a74..db08395fcb 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -5307,12 +5307,35 @@ PHP_METHOD(DatePeriod, __wakeup)
}
/* }}} */
+/* {{{ date_period_is_magic_property
+ * Common for date_period_read_property() and date_period_write_property() functions
+ */
+static int date_period_is_magic_property(zend_string *name)
+{
+ if (zend_string_equals_literal(name, "recurrences")
+ || zend_string_equals_literal(name, "include_start_date")
+ || zend_string_equals_literal(name, "start")
+ || zend_string_equals_literal(name, "current")
+ || zend_string_equals_literal(name, "end")
+ || zend_string_equals_literal(name, "interval")
+ ) {
+ return 1;
+ }
+ return 0;
+}
+/* }}} */
+
/* {{{ date_period_read_property */
static zval *date_period_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv)
{
if (type != BP_VAR_IS && type != BP_VAR_R) {
- zend_throw_error(NULL, "Retrieval of DatePeriod properties for modification is unsupported");
- return &EG(uninitialized_zval);
+ 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(uninitialized_zval);
+ }
+ zend_string_release(name);
}
Z_OBJPROP_P(object); /* build properties hash table */
@@ -5324,7 +5347,15 @@ static zval *date_period_read_property(zval *object, zval *member, int type, voi
/* {{{ date_period_write_property */
static void date_period_write_property(zval *object, zval *member, zval *value, void **cache_slot)
{
- zend_throw_error(NULL, "Writing to DatePeriod properties is unsupported");
+ zend_string *name = zval_get_string(member);
+ if (date_period_is_magic_property(name)) {
+ zend_throw_error(NULL, "Writing to DatePeriod->%s is unsupported", ZSTR_VAL(name));
+ zend_string_release(name);
+ return;
+ }
+ zend_string_release(name);
+
+ std_object_handlers.write_property(object, member, value, cache_slot);
}
/* }}} */