Skip to content

Commit 0b8ecce

Browse files
MAGETWO-99020: Unserialize config values
1 parent c98e421 commit 0b8ecce

File tree

1 file changed

+47
-7
lines changed

1 file changed

+47
-7
lines changed

app/code/Magento/Config/Model/Config/Backend/Serialized.php

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,67 @@
55
*/
66
namespace Magento\Config\Model\Config\Backend;
77

8+
use Magento\Framework\Unserialize\SecureUnserializer;
9+
use Magento\Framework\App\ObjectManager;
10+
811
class Serialized extends \Magento\Framework\App\Config\Value
912
{
13+
/**
14+
* @var SecureUnserializer
15+
*/
16+
private $unserializer;
17+
18+
/**
19+
* Serialized constructor
20+
*
21+
* @param \Magento\Framework\Model\Context $context
22+
* @param \Magento\Framework\Registry $registry
23+
* @param \Magento\Framework\App\Config\ScopeConfigInterface $config
24+
* @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
25+
* @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
26+
* @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
27+
* @param array $data
28+
* @param SecureUnserializer|null $unserializer
29+
*/
30+
public function __construct(
31+
\Magento\Framework\Model\Context $context,
32+
\Magento\Framework\Registry $registry,
33+
\Magento\Framework\App\Config\ScopeConfigInterface $config,
34+
\Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
35+
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
36+
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
37+
array $data = [],
38+
SecureUnserializer $unserializer = null
39+
) {
40+
parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
41+
$this->unserializer = $unserializer ?: ObjectManager::getInstance()->get(SecureUnserializer::class);
42+
}
43+
1044
/**
1145
* @return void
1246
*/
1347
protected function _afterLoad()
1448
{
15-
if (!is_array($this->getValue())) {
16-
$value = $this->getValue();
17-
$this->setValue(empty($value) ? false : unserialize($value));
49+
$value = $this->getValue();
50+
if (!is_array($value)) {
51+
try {
52+
$this->setValue(empty($value) ? false : $this->unserializer->unserialize($value));
53+
} catch (\Exception $e) {
54+
$this->_logger->critical($e);
55+
$this->setValue(false);
56+
}
1857
}
1958
}
20-
2159
/**
2260
* @return $this
2361
*/
2462
public function beforeSave()
2563
{
26-
if (is_array($this->getValue())) {
27-
$this->setValue(serialize($this->getValue()));
64+
$value = $this->getValue();
65+
if (is_array($value)) {
66+
$this->setValue(serialize($value));
2867
}
29-
return parent::beforeSave();
68+
parent::beforeSave();
69+
return $this;
3070
}
3171
}

0 commit comments

Comments
 (0)