Skip to content

Commit 01d30f8

Browse files
committed
Fix DatePeriod property handling with indirect modification
We do need to implement get_property_ptr_ptr to make arrays work correctly.
1 parent dfbeee0 commit 01d30f8

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

ext/date/php_date.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5423,15 +5423,21 @@ static zval *date_period_write_property(zval *object, zval *member, zval *value,
54235423
}
54245424
zend_string_release(name);
54255425

5426-
std_object_handlers.write_property(object, member, value, cache_slot);
5427-
return value;
5426+
return zend_std_write_property(object, member, value, cache_slot);
54285427
}
54295428
/* }}} */
54305429

54315430
/* {{{ date_period_get_property_ptr_ptr */
54325431
static zval *date_period_get_property_ptr_ptr(zval *object, zval *member, int type, void **cache_slot)
54335432
{
5434-
/* Fall back to read_property handler. */
5435-
return NULL;
5433+
zend_string *name = zval_get_string(member);
5434+
if (date_period_is_magic_property(name)) {
5435+
zend_throw_error(NULL, "Retrieval of DatePeriod->%s for modification is unsupported", ZSTR_VAL(name));
5436+
zend_string_release(name);
5437+
return &EG(error_zval);
5438+
}
5439+
zend_string_release(name);
5440+
5441+
return zend_std_get_property_ptr_ptr(object, member, type, cache_slot);
54365442
}
54375443
/* }}} */

ext/date/tests/bug65672.phpt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ $period->dynamic2 = [];
2828
$period->dynamic2[] = "array";
2929
var_dump($period->dynamic2);
3030

31+
$period->dynamic3[] = "array";
32+
var_dump($period->dynamic3);
33+
3134
?>
3235
--EXPECT--
3336
string(5) "stuff"
@@ -42,3 +45,7 @@ array(1) {
4245
[0]=>
4346
string(5) "array"
4447
}
48+
array(1) {
49+
[0]=>
50+
string(5) "array"
51+
}

0 commit comments

Comments
 (0)