Skip to content

Commit cf61034

Browse files
committed
Merge branch 'PHP-7.4'
2 parents 7c39ff8 + 3bd5b83 commit cf61034

File tree

3 files changed

+93
-1
lines changed

3 files changed

+93
-1
lines changed

ext/date/php_date.c

+10-1
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,7 @@ static zval *date_interval_write_property(zend_object *object, zend_string *memb
662662
static zval *date_interval_get_property_ptr_ptr(zend_object *object, zend_string *member, int type, void **cache_slot);
663663
static zval *date_period_read_property(zend_object *object, zend_string *member, int type, void **cache_slot, zval *rv);
664664
static zval *date_period_write_property(zend_object *object, zend_string *member, zval *value, void **cache_slot);
665+
static zval *date_period_get_property_ptr_ptr(zend_object *object, zend_string *member, int type, void **cache_slot);
665666

666667
/* {{{ Module struct */
667668
zend_module_entry date_module_entry = {
@@ -2161,7 +2162,7 @@ static void date_register_classes(void) /* {{{ */
21612162
date_object_handlers_period.free_obj = date_object_free_storage_period;
21622163
date_object_handlers_period.clone_obj = date_object_clone_period;
21632164
date_object_handlers_period.get_properties = date_object_get_properties_period;
2164-
date_object_handlers_period.get_property_ptr_ptr = NULL;
2165+
date_object_handlers_period.get_property_ptr_ptr = date_period_get_property_ptr_ptr;
21652166
date_object_handlers_period.get_gc = date_object_get_gc_period;
21662167
date_object_handlers_period.read_property = date_period_read_property;
21672168
date_object_handlers_period.write_property = date_period_write_property;
@@ -5284,3 +5285,11 @@ static zval *date_period_write_property(zend_object *object, zend_string *name,
52845285
return value;
52855286
}
52865287
/* }}} */
5288+
5289+
/* {{{ date_period_get_property_ptr_ptr */
5290+
static zval *date_period_get_property_ptr_ptr(zend_object *object, zend_string *member, int type, void **cache_slot)
5291+
{
5292+
/* Fall back to read_property handler. */
5293+
return NULL;
5294+
}
5295+
/* }}} */
+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
--TEST--
2+
DatePeriod: Test read only properties
3+
--INI--
4+
date.timezone=UTC
5+
--FILE--
6+
<?php
7+
8+
$start = new DateTime;
9+
$interval = new DateInterval('P1D');
10+
$end = new DateTime;
11+
$period = new DatePeriod($start, $interval, $end);
12+
13+
echo "recurrences: ";
14+
var_dump($period->recurrences);
15+
16+
echo "include_start_date: ";
17+
var_dump($period->include_start_date);
18+
19+
echo "start: ";
20+
var_dump($period->start == $start);
21+
22+
echo "current: ";
23+
var_dump($period->current);
24+
25+
echo "end: ";
26+
var_dump($period->end == $end);
27+
28+
echo "interval: ";
29+
var_dump($period->interval->format("%R%d"));
30+
?>
31+
--EXPECT--
32+
recurrences: int(1)
33+
include_start_date: bool(true)
34+
start: bool(true)
35+
current: NULL
36+
end: bool(true)
37+
interval: string(2) "+1"
+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
--TEST--
2+
DatePeriod: Test cannot modify read only properties
3+
--INI--
4+
date.timezone=UTC
5+
--FILE--
6+
<?php
7+
8+
$period = new DatePeriod(new DateTime, new DateInterval('P1D'), new DateTime);
9+
10+
$properties = [
11+
"recurrences",
12+
"include_start_date",
13+
"start",
14+
"current",
15+
"end",
16+
"interval",
17+
];
18+
19+
foreach ($properties as $property) {
20+
try {
21+
$period->$property = "new";
22+
} catch (Error $e) {
23+
echo $e->getMessage() . "\n";
24+
}
25+
26+
try {
27+
$period->$property[] = "extra";
28+
} catch (Error $e) {
29+
echo $e->getMessage() . "\n";
30+
}
31+
}
32+
33+
?>
34+
--EXPECT--
35+
Writing to DatePeriod properties is unsupported
36+
Retrieval of DatePeriod properties for modification is unsupported
37+
Writing to DatePeriod properties is unsupported
38+
Retrieval of DatePeriod properties for modification is unsupported
39+
Writing to DatePeriod properties is unsupported
40+
Retrieval of DatePeriod properties for modification is unsupported
41+
Writing to DatePeriod properties is unsupported
42+
Retrieval of DatePeriod properties for modification is unsupported
43+
Writing to DatePeriod properties is unsupported
44+
Retrieval of DatePeriod properties for modification is unsupported
45+
Writing to DatePeriod properties is unsupported
46+
Retrieval of DatePeriod properties for modification is unsupported

0 commit comments

Comments
 (0)