Skip to content

Commit 349d0c5

Browse files
author
roman
committed
MAGETWO-95386: Fixed incorrect design expretions functional
1 parent a7f676c commit 349d0c5

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

app/code/Magento/Theme/Model/Design/Backend/Exceptions.php

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
namespace Magento\Theme\Model\Design\Backend;
77

88
use Magento\Config\Model\Config\Backend\Serialized\ArraySerialized;
9+
use Magento\Framework\App\ObjectManager;
10+
use Magento\Framework\Unserialize\SecureUnserializer;
11+
use Psr\Log\LoggerInterface;
912

1013
class Exceptions extends ArraySerialized
1114
{
@@ -16,6 +19,11 @@ class Exceptions extends ArraySerialized
1619
*/
1720
protected $_design = null;
1821

22+
/**
23+
* @var SecureUnserializer
24+
*/
25+
private $secureUnserializer;
26+
1927
/**
2028
* Initialize dependencies
2129
*
@@ -26,6 +34,7 @@ class Exceptions extends ArraySerialized
2634
* @param \Magento\Framework\View\DesignInterface $design
2735
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
2836
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
37+
* @param SecureUnserializer|null $secureUnserializer
2938
* @param array $data
3039
*/
3140
public function __construct(
@@ -36,9 +45,12 @@ public function __construct(
3645
\Magento\Framework\View\DesignInterface $design,
3746
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
3847
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
48+
SecureUnserializer $secureUnserializer = null,
3949
array $data = []
4050
) {
4151
$this->_design = $design;
52+
$this->secureUnserializer = $secureUnserializer ?:
53+
ObjectManager::getInstance()->create(SecureUnserializer::class);
4254
parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
4355
}
4456

@@ -155,6 +167,24 @@ public function afterLoad()
155167
*/
156168
public function getValue()
157169
{
158-
return $this->getData('value') ?: [];
170+
return $this->validateValue($this->getData('value')) ?: [];
171+
}
172+
173+
private function validateValue($value)
174+
{
175+
try {
176+
if (is_string($value)) {
177+
$this->secureUnserializer->unserialize($value);
178+
}
179+
180+
if (is_object($value)) {
181+
$value = false;
182+
}
183+
} catch (\InvalidArgumentException $e) {
184+
$this->_logger->critical($e->getMessage());
185+
$value = false;
186+
}
187+
188+
return $value;
159189
}
160190
}

lib/internal/Magento/Framework/Unserialize/SecureUnserializer.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ public function unserialize($string)
2626
throw new \InvalidArgumentException('Data contains serialized object and cannot be unserialized');
2727
}
2828

29-
return unserialize($string);
29+
try {
30+
return unserialize($string);
31+
} catch (\Exception $e) {
32+
return false;
33+
}
3034
}
3135
}

0 commit comments

Comments
 (0)