[php-src] Issue #8471: Segmentation fault when converting immutable and mutable `DateTime` instances created using reflection
| From: | hype09 | Date: | Sun, 01 May 2022 11:28:36 +0000 |
| Subject: | [php-src] Issue #8471: Segmentation fault when converting immutable and mutable `DateTime` instances created using reflection | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-241355@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/8471
Author: hype09
### Description
## Reproduction
```php
<?php
$reflection = new ReflectionClass('\DateTime');
$mutable = $reflection->newInstanceWithoutConstructor();
$immutable = \DateTimeImmutable::createFromMutable($mutable);
```
Resulted in this output:
```
Process exited with code 139.
```
https://3v4l.org/gg0dq
The segfault happens when converting an "incomplete"
\DateTime to a
\DateTimeImmutable instance and vice versa.
## Background
I stumbled upon this during some unit test writing where my testing framework was unexpectedly
mocking \DateTime objects for me. After debugging for a while I could narrow the cause
down to the snippet above.
## Solution
I'd love to attempt to provide a fix for this, but I am unsure as to the proper solution,
implementation-wise: Should an error be thrown during the conversion, or during constructor-less
creation of the reflection instance? Or maybe no errors at all and some "sane default"
type of handling for creating DateTime instances via Reflection? Are there any
precedents in the implementation for other internal classes in regards to this? Thanks in advance!
### PHP Version
PHP 7.4 - PHP 8.1
### Operating System
_No response_