From cf62db132998f77efec137a195163d552da049f7 Mon Sep 17 00:00:00 2001 From: Matias Griese Date: Tue, 22 Dec 2020 13:51:56 +0200 Subject: [PATCH] Fixed unserialize in `MarkdownFormatter` class --- CHANGELOG.md | 1 + .../Grav/Framework/Compat/Serializable.php | 39 +++++++++++++ .../File/Formatter/AbstractFormatter.php | 57 +++++++------------ .../File/Formatter/MarkdownFormatter.php | 14 ++++- 4 files changed, 74 insertions(+), 37 deletions(-) create mode 100644 system/src/Grav/Framework/Compat/Serializable.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f41dc8f4..2db88ca2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ 1. [](#bugfix) * Fixed port issue with `system.custom_base_url` * Hide errors with `exif_read_data` in `ImageFile` + * Fixed unserialize in `MarkdownFormatter` class # v1.7.0-rc.20 ## 12/15/2020 diff --git a/system/src/Grav/Framework/Compat/Serializable.php b/system/src/Grav/Framework/Compat/Serializable.php new file mode 100644 index 000000000..9883d7a93 --- /dev/null +++ b/system/src/Grav/Framework/Compat/Serializable.php @@ -0,0 +1,39 @@ +__serialize()); + } + + /** + * @param string $serialized + * @return void + */ + public function unserialize($serialized): void + { + $this->__unserialize(unserialize($serialized, ['allowed_classes' => false])); + } +} diff --git a/system/src/Grav/Framework/File/Formatter/AbstractFormatter.php b/system/src/Grav/Framework/File/Formatter/AbstractFormatter.php index a47320e45..185e5e4a6 100644 --- a/system/src/Grav/Framework/File/Formatter/AbstractFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/AbstractFormatter.php @@ -11,6 +11,7 @@ declare(strict_types=1); namespace Grav\Framework\File\Formatter; +use Grav\Framework\Compat\Serializable; use Grav\Framework\File\Interfaces\FileFormatterInterface; /** @@ -20,6 +21,8 @@ use Grav\Framework\File\Interfaces\FileFormatterInterface; */ abstract class AbstractFormatter implements FileFormatterInterface { + use Serializable; + /** @var array */ private $config; @@ -32,23 +35,6 @@ abstract class AbstractFormatter implements FileFormatterInterface $this->config = $config; } - /** - * @return string - */ - public function serialize(): string - { - return serialize($this->doSerialize()); - } - - /** - * @param string $serialized - * @return void - */ - public function unserialize($serialized): void - { - $this->doUnserialize(unserialize($serialized, ['allowed_classes' => false])); - } - /** * @return string */ @@ -95,6 +81,24 @@ abstract class AbstractFormatter implements FileFormatterInterface */ abstract public function decode($data); + + /** + * @return array + */ + public function __serialize(): array + { + return ['config' => $this->config]; + } + + /** + * @param array $data + * @return void + */ + public function __unserialize(array $data): void + { + $this->config = $data['config']; + } + /** * Get either full configuration or a single option. * @@ -109,23 +113,4 @@ abstract class AbstractFormatter implements FileFormatterInterface return $this->config; } - - /** - * @return array - */ - protected function doSerialize(): array - { - return ['config' => $this->config]; - } - - /** - * Note: if overridden, make sure you call parent::doUnserialize() - * - * @param array $serialized - * @return void - */ - protected function doUnserialize(array $serialized): void - { - $this->config = $serialized['config']; - } } diff --git a/system/src/Grav/Framework/File/Formatter/MarkdownFormatter.php b/system/src/Grav/Framework/File/Formatter/MarkdownFormatter.php index 996f495e4..1ab36a277 100644 --- a/system/src/Grav/Framework/File/Formatter/MarkdownFormatter.php +++ b/system/src/Grav/Framework/File/Formatter/MarkdownFormatter.php @@ -34,7 +34,7 @@ class MarkdownFormatter extends AbstractFormatter parent::__construct($config); - $this->headerFormatter = $headerFormatter ?: new YamlFormatter($config['yaml']); + $this->headerFormatter = $headerFormatter ?? new YamlFormatter($config['yaml']); } /** @@ -145,4 +145,16 @@ class MarkdownFormatter extends AbstractFormatter return $content; } + + public function __serialize(): array + { + return parent::__serialize() + ['headerFormatter' => $this->headerFormatter]; + } + + public function __unserialize(array $data): void + { + parent::__unserialize($data); + + $this->headerFormatter = $data['headerFormatter'] ?? new YamlFormatter(['inline' => 20]); + } }