From 4b4fad947637586e36afef92cf1e4d1746cc1687 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Fri, 22 Jul 2022 20:49:07 +0200 Subject: [PATCH] Fix serialization to include private properties, fixes #1727, fixes phpro/grumphp#1020 --- src/Monolog/Handler/Handler.php | 11 ++++++++++- tests/Monolog/Handler/NullHandlerTest.php | 11 +++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Monolog/Handler/Handler.php b/src/Monolog/Handler/Handler.php index afef2fd7..34b4935d 100644 --- a/src/Monolog/Handler/Handler.php +++ b/src/Monolog/Handler/Handler.php @@ -48,6 +48,15 @@ abstract class Handler implements HandlerInterface { $this->close(); - return array_keys(get_object_vars($this)); + $reflClass = new \ReflectionClass($this); + + $keys = []; + foreach ($reflClass->getProperties() as $reflProp) { + if (!$reflProp->isStatic()) { + $keys[] = $reflProp->getName(); + } + } + + return $keys; } } diff --git a/tests/Monolog/Handler/NullHandlerTest.php b/tests/Monolog/Handler/NullHandlerTest.php index b7e482ba..61666d80 100644 --- a/tests/Monolog/Handler/NullHandlerTest.php +++ b/tests/Monolog/Handler/NullHandlerTest.php @@ -30,4 +30,15 @@ class NullHandlerTest extends TestCase $handler = new NullHandler(Logger::WARNING); $this->assertFalse($handler->handle($this->getRecord(Logger::DEBUG))); } + + public function testSerializeRestorePrivate() + { + $handler = new NullHandler(Logger::WARNING); + self::assertFalse($handler->handle($this->getRecord(Logger::DEBUG))); + self::assertTrue($handler->handle($this->getRecord(Logger::WARNING))); + + $handler = unserialize(serialize($handler)); + self::assertFalse($handler->handle($this->getRecord(Logger::DEBUG))); + self::assertTrue($handler->handle($this->getRecord(Logger::WARNING))); + } }