diff options
| author | Craig Duncan <duncan3dc@php.net> | 2019-05-30 19:15:58 +0100 |
|---|---|---|
| committer | Craig Duncan <duncan3dc@php.net> | 2019-05-30 19:15:58 +0100 |
| commit | bc87424835a488a3b80f5eb61b455c2da1658d9b (patch) | |
| tree | 4e58518aabfc375fd520d0dc3f32966e9e7e1f7f /ext/date/php_date.c | |
| parent | 0a6a350371832bbece79b55d12b78055cf3a3b11 (diff) | |
| parent | a08b3b6d1924276662ea80d155c4f9e18147e1a0 (diff) | |
| download | php-git-bc87424835a488a3b80f5eb61b455c2da1658d9b.tar.gz | |
Merge branch 'PHP-7.4'
* PHP-7.4:
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.c | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c index e995b45341..7e04058585 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -5264,12 +5264,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(zend_object *object, zend_string *name, 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); } object->handlers->get_properties(object); /* build properties hash table */ @@ -5281,7 +5304,15 @@ static zval *date_period_read_property(zend_object *object, zend_string *name, i /* {{{ date_period_write_property */ static zval *date_period_write_property(zend_object *object, zend_string *name, 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 value; + } + zend_string_release(name); + + std_object_handlers.write_property(object, member, value, cache_slot); return value; } /* }}} */ |
