Skip to content

Commit

Permalink
Merge branch 'PHP-8.1' into PHP-8.2
Browse files Browse the repository at this point in the history
  • Loading branch information
derickr committed Aug 9, 2023
2 parents 8f1cbc8 + 4833b84 commit 7f6e98c
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
6 changes: 6 additions & 0 deletions ext/date/php_date.c
Original file line number Diff line number Diff line change
Expand Up @@ -4765,6 +4765,12 @@ PHP_METHOD(DatePeriod, __construct)
}
dpobj->start_ce = date_ce_date;
} else {
/* check initialisation */
DATE_CHECK_INITIALIZED(Z_PHPDATE_P(start)->time, DateTimeInterface);
if (end) {
DATE_CHECK_INITIALIZED(Z_PHPDATE_P(end)->time, DateTimeInterface);
}

/* init */
php_interval_obj *intobj = Z_PHPINTERVAL_P(interval);

Expand Down
28 changes: 28 additions & 0 deletions ext/date/tests/bug-gh11416.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
--TEST--
Bug GH-11416: Crash with DatePeriod when uninitialised objects are passed in
--INI--
date.timezone=UTC
--FILE--
<?php
$now = new DateTimeImmutable();

$date = (new ReflectionClass(DateTime::class))->newInstanceWithoutConstructor();
try {
new DatePeriod($date, new DateInterval('P1D'), 2);
} catch (Error $e) {
echo get_class($e), ': ', $e->getMessage(), "\n";
}

$date = (new ReflectionClass(DateTime::class))->newInstanceWithoutConstructor();
try {
new DatePeriod($now, new DateInterval('P1D'), $date);
} catch (Error $e) {
echo get_class($e), ': ', $e->getMessage(), "\n";
}

echo "OK\n";
?>
--EXPECT--
Error: The DateTimeInterface object has not been correctly initialized by its constructor
Error: The DateTimeInterface object has not been correctly initialized by its constructor
OK

0 comments on commit 7f6e98c

Please sign in to comment.