Skip to content

Commit 571516d

Browse files
committed
Merge remote-tracking branch 'origin/2.1.18-develop' into 2.1.18-develop-pr70
2 parents 4a103dc + e29f4c5 commit 571516d

File tree

4 files changed

+71
-12
lines changed

4 files changed

+71
-12
lines changed

app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Save.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ public function execute()
7878
unset($data['rule']);
7979
}
8080

81+
unset($data['conditions_serialized']);
82+
unset($data['actions_serialized']);
83+
8184
$model->loadPost($data);
8285

8386
$this->_objectManager->get('Magento\Backend\Model\Session')->setPageData($data);

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

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,55 @@
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
}
2059

@@ -23,9 +62,11 @@ protected function _afterLoad()
2362
*/
2463
public function beforeSave()
2564
{
26-
if (is_array($this->getValue())) {
27-
$this->setValue(serialize($this->getValue()));
65+
$value = $this->getValue();
66+
if (is_array($value)) {
67+
$this->setValue(serialize($value));
2868
}
29-
return parent::beforeSave();
69+
parent::beforeSave();
70+
return $this;
3071
}
3172
}

app/code/Magento/Rule/Block/Editable.php

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
use Magento\Framework\Data\Form\Element\Renderer\RendererInterface;
99
use Magento\Framework\View\Element\AbstractBlock;
1010

11+
/**
12+
* Renderer for Editable sales rules
13+
*/
1114
class Editable extends AbstractBlock implements RendererInterface
1215
{
1316
/**
@@ -48,15 +51,15 @@ public function render(\Magento\Framework\Data\Form\Element\AbstractElement $ele
4851

4952
if ($element->getShowAsText()) {
5053
$html = ' <input type="hidden" class="hidden" id="' .
51-
$element->getHtmlId() .
54+
$this->escapeHtmlAttr($element->getHtmlId()) .
5255
'" name="' .
53-
$element->getName() .
56+
$this->escapeHtmlAttr($element->getName()) .
5457
'" value="' .
55-
$element->getValue() .
58+
$this->escapeHtmlAttr($element->getValue()) .
5659
'" data-form-part="' .
57-
$element->getData('data-form-part') .
60+
$this->escapeHtmlAttr($element->getData('data-form-part')) .
5861
'"/> ' .
59-
htmlspecialchars(
62+
$this->escapeHtml(
6063
$valueName
6164
) . '&nbsp;';
6265
} else {
@@ -92,4 +95,15 @@ public function render(\Magento\Framework\Data\Form\Element\AbstractElement $ele
9295

9396
return $html;
9497
}
98+
99+
/**
100+
* Escape html attribute
101+
*
102+
* @param string\null $attribute
103+
* @return string
104+
*/
105+
private function escapeHtmlAttr($attribute)
106+
{
107+
return $attribute ? $this->_escaper->escapeHtmlAttr($attribute) : $attribute;
108+
}
95109
}

dev/tests/static/testsuite/Magento/Test/Js/_files/eslint/.eslintrc-magento

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@
6262
2,
6363
{
6464
"args": "after-used",
65-
"vars": "all"
65+
"vars": "all",
66+
"varsIgnorePattern": "config"
6667
}
6768
],
6869
"no-use-before-define": 2,

0 commit comments

Comments
 (0)