File tree 3 files changed +18
-7
lines changed
3 files changed +18
-7
lines changed Original file line number Diff line number Diff line change @@ -53,7 +53,9 @@ async function startServer(bundleStats, opts) {
53
53
mode : 'server' ,
54
54
get chartData ( ) { return JSON . stringify ( chartData ) } ,
55
55
defaultSizes : JSON . stringify ( defaultSizes ) ,
56
- enableWebSocket : true
56
+ enableWebSocket : true ,
57
+ // Helpers
58
+ escapeScript
57
59
} ) ;
58
60
} ) ;
59
61
@@ -131,9 +133,11 @@ async function generateReport(bundleStats, opts) {
131
133
{
132
134
mode : 'static' ,
133
135
chartData : JSON . stringify ( chartData ) ,
134
- assetContent : getAssetContent ,
135
136
defaultSizes : JSON . stringify ( defaultSizes ) ,
136
- enableWebSocket : false
137
+ enableWebSocket : false ,
138
+ // Helpers
139
+ assetContent : getAssetContent ,
140
+ escapeScript
137
141
} ,
138
142
( err , reportHtml ) => {
139
143
try {
@@ -168,6 +172,13 @@ function getAssetContent(filename) {
168
172
return fs . readFileSync ( `${ projectRoot } /public/${ filename } ` , 'utf8' ) ;
169
173
}
170
174
175
+ /**
176
+ * Escapes `<` characters in the string to safely use it in `<script>` tag.
177
+ */
178
+ function escapeScript ( value ) {
179
+ return String ( value ) . replace ( / < / gu, '\\u003c' ) ;
180
+ }
181
+
171
182
function getChartData ( analyzerOpts , ...args ) {
172
183
let chartData ;
173
184
const { logger} = analyzerOpts ;
Original file line number Diff line number Diff line change 1
1
<% if (mode === ' static' ) { % >
2
2
<!-- < %= filename % > -->
3
3
< script>
4
- < %- assetContent (filename) % >
4
+ < %- escapeScript ( assetContent (filename) ) % >
5
5
< / script>
6
6
< % } else { % >
7
7
< script src= " /<%= filename %>" >< / script>
Original file line number Diff line number Diff line change 11
11
<body >
12
12
<div id =" app" ></div >
13
13
<script >
14
- window .chartData = < %- chartData % > ;
15
- window .defaultSizes = < %- defaultSizes % > ;
16
- window .enableWebSocket = < %- enableWebSocket % > ;
14
+ window .chartData = < %- escapeScript ( chartData) % > ;
15
+ window .defaultSizes = < %- escapeScript ( defaultSizes) % > ;
16
+ window .enableWebSocket = < %- escapeScript ( enableWebSocket) % > ;
17
17
</script >
18
18
</body >
19
19
</html >
You can’t perform that action at this time.
0 commit comments