Skip to content

Commit 7eddafd

Browse files
authored
Merge pull request #4622 from magento-tsg/2.2.10-develop-pr109
[TSG] Fixes for 2.2 (pr109) (2.2.10-develop)
2 parents 9476a3f + 8829d6d commit 7eddafd

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

lib/internal/Magento/Framework/Escaper.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ class Escaper
2828
*/
2929
private $logger;
3030

31+
/**
32+
* @var \Magento\Framework\Translate\InlineInterface
33+
*/
34+
private $translateInline;
35+
3136
/**
3237
* @var string[]
3338
*/
@@ -335,8 +340,11 @@ public function escapeJsQuote($data, $quote = '\'')
335340
*/
336341
public function escapeXssInUrl($data)
337342
{
343+
$data = html_entity_decode((string)$data);
344+
$this->getTranslateInline()->processResponseBody($data);
345+
338346
return htmlspecialchars(
339-
$this->escapeScriptIdentifiers(html_entity_decode((string)$data)),
347+
$this->escapeScriptIdentifiers($data),
340348
$this->htmlSpecialCharsFlag | ENT_HTML5 | ENT_HTML401,
341349
'UTF-8',
342350
false
@@ -430,4 +438,19 @@ private function filterProhibitedTags(array $allowedTags): array
430438

431439
return $allowedTags;
432440
}
441+
442+
/**
443+
* Resolve inline translator.
444+
*
445+
* @return \Magento\Framework\Translate\InlineInterface
446+
*/
447+
private function getTranslateInline()
448+
{
449+
if ($this->translateInline === null) {
450+
$this->translateInline = \Magento\Framework\App\ObjectManager::getInstance()
451+
->get(\Magento\Framework\Translate\InlineInterface::class);
452+
}
453+
454+
return $this->translateInline;
455+
}
433456
}

lib/internal/Magento/Framework/Test/Unit/EscaperTest.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
99
use Magento\Framework\Escaper;
10+
use Magento\Framework\Translate\Inline;
1011

1112
/**
1213
* \Magento\Framework\Escaper test case
@@ -16,26 +17,40 @@ class EscaperTest extends \PHPUnit\Framework\TestCase
1617
/**
1718
* @var \Magento\Framework\Escaper
1819
*/
19-
protected $escaper = null;
20+
protected $escaper;
2021

2122
/**
2223
* @var \Magento\Framework\ZendEscaper
2324
*/
2425
private $zendEscaper;
2526

27+
/**
28+
* @var Inline
29+
*/
30+
private $translateInline;
31+
2632
/**
2733
* @var \Psr\Log\LoggerInterface
2834
*/
2935
private $loggerMock;
3036

37+
/**
38+
* @inheritdoc
39+
*/
3140
protected function setUp()
3241
{
42+
$objectManagerHelper = new ObjectManager($this);
3343
$this->escaper = new Escaper();
3444
$this->zendEscaper = new \Magento\Framework\ZendEscaper();
45+
$this->translateInline = $objectManagerHelper->getObject(Inline::class);
3546
$this->loggerMock = $this->getMockForAbstractClass(\Psr\Log\LoggerInterface::class);
36-
$objectManagerHelper = new ObjectManager($this);
3747
$objectManagerHelper->setBackwardCompatibleProperty($this->escaper, 'escaper', $this->zendEscaper);
3848
$objectManagerHelper->setBackwardCompatibleProperty($this->escaper, 'logger', $this->loggerMock);
49+
$objectManagerHelper->setBackwardCompatibleProperty(
50+
$this->escaper,
51+
'translateInline',
52+
$this->translateInline
53+
);
3954
}
4055

4156
/**
@@ -393,6 +408,10 @@ public function escapeDataProvider()
393408
'http://test.com/?redirect=\x64\x61\x74\x61\x3a\x74\x65\x78\x74x2cCPHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg',
394409
'http://test.com/?redirect=:\x74\x65\x78\x74x2cCPHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg',
395410
],
411+
[
412+
'http://test.com/?{{{test}}{{test_translated}}{{tes_origin}}{{theme}}}',
413+
'http://test.com/?test',
414+
],
396415
];
397416
}
398417
}

0 commit comments

Comments
 (0)