6
6
namespace Magento \Theme \Model \Design \Backend ;
7
7
8
8
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 ;
9
12
10
13
class Exceptions extends ArraySerialized
11
14
{
@@ -16,6 +19,11 @@ class Exceptions extends ArraySerialized
16
19
*/
17
20
protected $ _design = null ;
18
21
22
+ /**
23
+ * @var SecureUnserializer
24
+ */
25
+ private $ secureUnserializer ;
26
+
19
27
/**
20
28
* Initialize dependencies
21
29
*
@@ -26,6 +34,7 @@ class Exceptions extends ArraySerialized
26
34
* @param \Magento\Framework\View\DesignInterface $design
27
35
* @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
28
36
* @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
37
+ * @param SecureUnserializer|null $secureUnserializer
29
38
* @param array $data
30
39
*/
31
40
public function __construct (
@@ -36,9 +45,12 @@ public function __construct(
36
45
\Magento \Framework \View \DesignInterface $ design ,
37
46
\Magento \Framework \Model \ResourceModel \AbstractResource $ resource = null ,
38
47
\Magento \Framework \Data \Collection \AbstractDb $ resourceCollection = null ,
48
+ SecureUnserializer $ secureUnserializer = null ,
39
49
array $ data = []
40
50
) {
41
51
$ this ->_design = $ design ;
52
+ $ this ->secureUnserializer = $ secureUnserializer ?:
53
+ ObjectManager::getInstance ()->create (SecureUnserializer::class);
42
54
parent ::__construct ($ context , $ registry , $ config , $ cacheTypeList , $ resource , $ resourceCollection , $ data );
43
55
}
44
56
@@ -155,6 +167,24 @@ public function afterLoad()
155
167
*/
156
168
public function getValue ()
157
169
{
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 ;
159
189
}
160
190
}
0 commit comments