summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Punt <tpunt@hotmail.co.uk>2016-03-07 09:40:22 +0000
committerAnatol Belski <ab@php.net>2016-03-11 14:08:48 +0100
commitf3f5a07aa569d6fba599afcd69c04d6626c57c3f (patch)
tree520133da209a01041f6d0fda9eef1d45a05cf241
parent8cd903ea685a6ef56aa77e95c00db8aac53a7c39 (diff)
downloadphp-git-f3f5a07aa569d6fba599afcd69c04d6626c57c3f.tar.gz
Fix DatePeriod::getEndDate() segfault
-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 e06ace7f8b..4cb0ec8ff4 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -4536,6 +4536,10 @@ PHP_METHOD(DatePeriod, getEndDate)
dpobj = (php_period_obj *)zend_object_store_get_object(getThis() TSRMLS_CC);
+ if (!dpobj->end) {
+ return;
+ }
+
php_date_instantiate(dpobj->start_ce, return_value TSRMLS_CC);
dateobj = (php_date_obj *)zend_object_store_get_object(return_value TSRMLS_CC);
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