1
1
<?php
2
2
3
3
/** @var \Algolia\AlgoliaSearch\Block\Configuration $block */
4
+ /** @var \Magento\Framework\Escaper $escaper */
4
5
5
6
$ configuration = $ block ->getConfiguration ();
6
7
8
+ // Escape untrusted input (escape inline for PHPCS where possible)
9
+ $ instantSearchHideCss = $ escaper ->escapeHtml ($ configuration ['instant ' ]['selector ' ]) . ' {display:none} ' ;
10
+
7
11
if (class_exists ('\Magento\Framework\View\Helper\SecureHtmlRenderer ' )): ?>
8
12
<?php
9
- /** @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer */
13
+ /** @var \Magento\Framework\View\Helper\SecureHtmlRenderer $secureRenderer */
10
14
if ($ block ->canLoadInstantSearch ()) {
11
- $ css = /* @noEscape */ $ secureRenderer ->renderTag ('style ' , [], $ configuration ['instant ' ]['selector ' ] . ' {display:none} ' , false );
12
- /* @noEscape */ echo $ secureRenderer ->renderTag ('script ' , [], 'document.write( \'' . $ css . '\'); ' , false );
15
+ $ styleElement = $ secureRenderer ->renderTag ('style ' , [], $ instantSearchHideCss , false );
16
+ /** SecureHtmlRenderer::renderTag yields a false positive on PHPCS */
17
+ echo /** phpcs:ignore Magento2.Security.EscapeOutput.OutputNotEscaped */
18
+ $ secureRenderer ->renderTag (
19
+ 'script ' ,
20
+ [],
21
+ 'document.write( \'' . $ escaper ->escapeJs ($ styleElement ) . '\'); ' ,
22
+ false
23
+ );
13
24
}
14
25
?>
15
26
16
- <?= /* @noEscape */ $ secureRenderer ->renderTag ('script ' , [], "window.algoliaConfig = " . json_encode ($ configuration ) . '; ' , false ); ?>
27
+ <?=
28
+ /**
29
+ * SecureHtmlRenderer::renderTag yields a false positive on PHPCS
30
+ * phpcs:ignore Magento2.Security.EscapeOutput.OutputNotEscaped
31
+ */
32
+ $ secureRenderer ->renderTag (
33
+ 'script ' ,
34
+ [],
35
+ "window.algoliaConfig = JSON.parse(' " . $ escaper ->escapeJs (json_encode ($ configuration )) . "') " ,
36
+ false
37
+ )
38
+ ?>
17
39
<?php else : ?>
18
40
<script>
19
41
<?php
20
42
if ($ block ->canLoadInstantSearch ()):
21
- $ css = ' <style type="text/css"> ' . $ configuration [ ' instant ' ][ ' selector ' ] . ' {display:none} </style>' ;
43
+ $ styleElement = " <style> $ instantSearchHideCss </style> " ;
22
44
?>
23
45
// Hide the instant-search selector ASAP to remove flickering. Will be re-displayed later with JS.
24
- document.write('<?= /* @noEscape */ $ css ; ?> ');
46
+ document.write('<?= $ escaper -> escapeJs ( $ styleElement ) ?> ');
25
47
<?php
26
48
endif ;
27
49
?>
28
-
29
- window.algoliaConfig = <?= /* @noEscape */ json_encode ($ configuration ); ?> ;
50
+ window.algoliaConfig = JSON.parse('<?= $ escaper ->escapeJs (json_encode ($ configuration )) ?> ');
30
51
</script>
31
52
<?php endif ; ?>
32
53
@@ -39,4 +60,4 @@ if (class_exists('\Magento\Framework\View\Helper\SecureHtmlRenderer')): ?>
39
60
}
40
61
}
41
62
</script>
42
- <?php endif ;?>
63
+ <?php endif ; ?>
0 commit comments