summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/date/php_date.c4
-rw-r--r--ext/date/tests/bug71635.phpt11
2 files changed, 15 insertions, 0 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index 2fe78a0e69..c2ef177894 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -4447,6 +4447,10 @@ PHP_METHOD(DatePeriod, getEndDate)
dpobj = Z_PHPPERIOD_P(getThis());
+ if (!dpobj->end) {
+ return;
+ }
+
php_date_instantiate(dpobj->start_ce, return_value);
dateobj = Z_PHPDATE_P(return_value);
dateobj->time = timelib_time_ctor();
diff --git a/ext/date/tests/bug71635.phpt b/ext/date/tests/bug71635.phpt
new file mode 100644
index 0000000000..8c5ae25db3
--- /dev/null
+++ b/ext/date/tests/bug71635.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Bug #71635 (segfault in DatePeriod::getEndDate() when no end date has been set)
+--FILE--
+<?php
+date_default_timezone_set('UTC');
+$period = new DatePeriod(new DateTimeImmutable("now"), new DateInterval("P2Y4DT6H8M"), 2);
+
+var_dump($period->getEndDate());
+?>
+--EXPECT--
+NULL \ No newline at end of file