Skip to content

Segmentation fault when converting immutable and mutable DateTime instances created using reflection #8471

Closed
@hype09

Description

@hype09

Description

Reproduction

<?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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions