[php-src] master: Merge branch 'PHP-8.5'
Ilija Tovilo <[email protected]>
| Newsgroups | gmane.comp.php.cvs.general |
|---|---|
| Message-ID | <[email protected]> |
Author: Ilija Tovilo (iluuu1994)
Date: 2026-07-15T20:50:17+02:00
Commit: https://github.com/php/php-src/commit/80a147a182936b54d843a6dc5f44e8893264cbb6
Raw diff: https://github.com/php/php-src/commit/80a147a182936b54d843a6dc5f44e8893264cbb6.diff
Merge branch 'PHP-8.5'
* PHP-8.5:
Fix leak on double DatePeriod::__construct() call
Changed paths:
A ext/date/tests/DatePeriod_double_constructor_call.phpt
M ext/date/php_date.c
Diff:
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 2b0696305d2b..ba660650e256 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -5160,6 +5160,23 @@ PHP_METHOD(DatePeriod, createFromISO8601String)
}
}
+static void date_period_reset(php_period_obj *period_obj)
+{
+ if (period_obj->start) {
+ timelib_time_dtor(period_obj->start);
+ }
+ if (period_obj->current) {
+ timelib_time_dtor(period_obj->current);
+ }
+ if (period_obj->end) {
+ timelib_time_dtor(period_obj->end);
+ }
+ if (period_obj->interval) {
+ timelib_rel_time_dtor(period_obj->interval);
+ }
+ memset(period_obj, 0, XtOffsetOf(php_period_obj, std));
+}
+
/* {{{ Creates new DatePeriod object. */
PHP_METHOD(DatePeriod, __construct)
{
@@ -5181,7 +5198,7 @@ PHP_METHOD(DatePeriod, __construct)
}
dpobj = Z_PHPPERIOD_P(ZEND_THIS);
- dpobj->current = NULL;
+ date_period_reset(dpobj);
if (isostr) {
zend_error(E_DEPRECATED, "Calling DatePeriod::__construct(string $isostr, int $options = 0) is deprecated, "
@@ -5199,6 +5216,7 @@ PHP_METHOD(DatePeriod, __construct)
if (end) {
DATE_CHECK_INITIALIZED(Z_PHPDATE_P(end)->time, date_ce_interface);
}
+ DATE_CHECK_INITIALIZED(Z_PHPINTERVAL_P(interval)->initialized, Z_OBJCE_P(interval));
/* init */
php_interval_obj *intobj = Z_PHPINTERVAL_P(interval);
diff --git a/ext/date/tests/DatePeriod_double_constructor_call.phpt b/ext/date/tests/DatePeriod_double_constructor_call.phpt
new file mode 100644
index 000000000000..551d2727282d
--- /dev/null
+++ b/ext/date/tests/DatePeriod_double_constructor_call.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Double DatePeriod::__construct() call
+--FILE--
+<?php
+
+$start = new \DateTime();
+$interval = new \DateInterval('P1D');
+$period = new \DatePeriod($start, $interval, 1);
+$period->__construct($start, $interval, 1);
+
+?>
+===DONE===
+--EXPECT--
+===DONE===