diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2019-10-28 13:08:06 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2019-10-28 13:08:34 +0100 |
commit | 736cd93ef53a458dbe5b86cab1f61721ccbc8b2d (patch) | |
tree | 812e47d6264e5b87dcf7cee724a49a7ecd61f258 | |
parent | b61b60d15bf17aed3daee79db55399a2643d7a60 (diff) | |
parent | 89c327f8848c1a56a61479ee5e7fdd3694d0f867 (diff) | |
download | php-git-736cd93ef53a458dbe5b86cab1f61721ccbc8b2d.tar.gz |
Merge branch 'PHP-7.2' into PHP-7.3
* PHP-7.2:
Fix #78751: Serialising DatePeriod converts DateTimeImmutable
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | ext/date/php_date.c | 12 | ||||
-rw-r--r-- | ext/date/tests/bug78751.phpt | 16 |
3 files changed, 23 insertions, 6 deletions
@@ -14,6 +14,7 @@ PHP NEWS - Date: . Fixed bug #70153 (\DateInterval incorrectly unserialized). (Maksim Iakunin) + . Fixed bug #78751 (Serialising DatePeriod converts DateTimeImmutable). (cmb) - Iconv: . Fixed bug #78642 (Wrong libiconv version displayed). (gedas at martynas, diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 49df94f592..00656a41f9 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -5168,7 +5168,7 @@ static HashTable *date_object_get_properties_period(zval *object) /* {{{ */ if (period_obj->start) { php_date_obj *date_obj; - object_init_ex(&zv, date_ce_date); + object_init_ex(&zv, period_obj->start_ce); date_obj = Z_PHPDATE_P(&zv); date_obj->time = timelib_time_clone(period_obj->start); } else { @@ -5178,7 +5178,7 @@ static HashTable *date_object_get_properties_period(zval *object) /* {{{ */ if (period_obj->current) { php_date_obj *date_obj; - object_init_ex(&zv, date_ce_date); + object_init_ex(&zv, period_obj->start_ce); date_obj = Z_PHPDATE_P(&zv); date_obj->time = timelib_time_clone(period_obj->current); } else { @@ -5188,7 +5188,7 @@ static HashTable *date_object_get_properties_period(zval *object) /* {{{ */ if (period_obj->end) { php_date_obj *date_obj; - object_init_ex(&zv, date_ce_date); + object_init_ex(&zv, period_obj->start_ce); date_obj = Z_PHPDATE_P(&zv); date_obj->time = timelib_time_clone(period_obj->end); } else { @@ -5225,7 +5225,7 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash ht_entry = zend_hash_str_find(myht, "start", sizeof("start")-1); if (ht_entry) { - if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_date) { + if (Z_TYPE_P(ht_entry) == IS_OBJECT && instanceof_function(Z_OBJCE_P(ht_entry), date_ce_interface)) { php_date_obj *date_obj; date_obj = Z_PHPDATE_P(ht_entry); period_obj->start = timelib_time_clone(date_obj->time); @@ -5239,7 +5239,7 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash ht_entry = zend_hash_str_find(myht, "end", sizeof("end")-1); if (ht_entry) { - if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_date) { + if (Z_TYPE_P(ht_entry) == IS_OBJECT && instanceof_function(Z_OBJCE_P(ht_entry), date_ce_interface)) { php_date_obj *date_obj; date_obj = Z_PHPDATE_P(ht_entry); period_obj->end = timelib_time_clone(date_obj->time); @@ -5252,7 +5252,7 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash ht_entry = zend_hash_str_find(myht, "current", sizeof("current")-1); if (ht_entry) { - if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_date) { + if (Z_TYPE_P(ht_entry) == IS_OBJECT && instanceof_function(Z_OBJCE_P(ht_entry), date_ce_interface)) { php_date_obj *date_obj; date_obj = Z_PHPDATE_P(ht_entry); period_obj->current = timelib_time_clone(date_obj->time); diff --git a/ext/date/tests/bug78751.phpt b/ext/date/tests/bug78751.phpt new file mode 100644 index 0000000000..6021b9f6ae --- /dev/null +++ b/ext/date/tests/bug78751.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #78751 (Serialising DatePeriod converts DateTimeImmutable) +--FILE-- +<?php +$oDay = new DateTimeImmutable('2019-10-25'); +$oDateInterval = DateInterval::createFromDateString('1 day'); +$oDays = new DatePeriod($oDay, $oDateInterval, $oDay->modify('+1 day')); +$oDays = unserialize(serialize($oDays)); +var_dump( + $oDays->start instanceof DateTimeImmutable, + $oDays->end instanceof DateTimeImmutable +); +?> +--EXPECT-- +bool(true) +bool(true) |