Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(html/minifier): avoid ; at the end of js #6188

Merged
merged 2 commits into from Oct 18, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions crates/swc_html_minifier/src/lib.rs
Expand Up @@ -1740,6 +1740,7 @@ impl Minifier<'_> {

options.codegen.minify = true;
options.codegen.target = options.parser.target;
options.codegen.omit_last_semi = true;

let mut emitter = swc_ecma_codegen::Emitter {
cfg: options.codegen,
Expand Down
@@ -1,5 +1,5 @@
<!doctype html><html lang=en><meta charset=UTF-8><meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0"><title>Document</title><button type=button onclick=a(3); ng-click=a(3); data-click=a(3);></button>
<button type=button onclick=a(3); ng-click=a(3); data-click=a(3);></button>
<!doctype html><html lang=en><meta charset=UTF-8><meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0"><title>Document</title><button type=button onclick=a(3) ng-click=a(3) data-click=a(3)></button>
<button type=button onclick=a(3) ng-click=a(3) data-click=a(3)></button>
<div data-json='{"foo":"bar"}'></div>
<div data-style=color:red;background-color:red></div>
<iframe srcdoc="<p>test." src=nosrcdoc.html></iframe>
Expand Down
@@ -1,2 +1,2 @@
<!doctype html><html lang=en><title>Document</title><link rel=stylesheet href=test.css media="screen and (min-width:1024px)"><a rel="bar baz foo"></a>
<div onclick='t:alert("test");'></div>
<div onclick='t:alert("test")'></div>
Expand Up @@ -6,6 +6,6 @@

<div>test</div>
<div>test</div>
<div onblur='alert("test");'>test</div>
<div onblur='alert("test")'>test</div>
<div>test</div>
<div onblur=#>test</div>
@@ -1,12 +1,12 @@
<!doctype html><html lang=en><title>Document</title><form action=/test>
<input onkeydown=myFunction();>
<input onkeydown=myFunction()>
</form>
<div type=text onmouseover=myFunction();>test</div>
<div type=text onmouseover=myFunction();>test</div>
<div type=text onmouseover=myFunction()>test</div>
<div type=text onmouseover=myFunction()>test</div>
<div type=text>test</div>
<svg version=1.1 viewBox="0 0 100 100" preserveAspectRatio="xMidYMid slice" style=width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1>
<circle onmouseover='alert("test");' cx=50 cy=50 r=30 style=fill:url(#gradient) />
<circle onmouseover='alert("test")' cx=50 cy=50 r=30 style=fill:url(#gradient) />
</svg>
<div type=text onmouseover=myFunction();>test</div>
<a href=https://datacadamia.com onclick="console.log(`Navigation to ${this.href} cancelled`);return false;">Click me</a>
<a href=https://datacadamia.com onclick="console.log(`Navigation to ${this.href} cancelled`);return false;">Click me</a>
<div type=text onmouseover=myFunction()>test</div>
<a href=https://datacadamia.com onclick="console.log(`Navigation to ${this.href} cancelled`);return false">Click me</a>
<a href=https://datacadamia.com onclick="console.log(`Navigation to ${this.href} cancelled`);return false">Click me</a>
@@ -1,2 +1,2 @@
<!doctype html><html lang=en><meta charset=UTF-8><meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0"><meta http-equiv=X-UA-Compatible content="ie=edge"><title>Document</title><a href=http://www.google.co.uk/ onclick='return confirm("Follow this link?");'>Google</a>
<a href=http://www.google.co.uk/ onclick='alert("testtest");'>Google</a>
<!doctype html><html lang=en><meta charset=UTF-8><meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0"><meta http-equiv=X-UA-Compatible content="ie=edge"><title>Document</title><a href=http://www.google.co.uk/ onclick='return confirm("Follow this link?")'>Google</a>
<a href=http://www.google.co.uk/ onclick='alert("testtest")'>Google</a>
@@ -1,6 +1,6 @@
<!doctype html><script defer>console.log();</script><script>console.log();</script><script>console.log();</script><script type=module>console.log();</script><script type=module>console.log();</script><script>window.jQuery||document.write('<script src="jquery.js"></script>');</script><script type=text/html>
<!doctype html><script defer>console.log()</script><script>console.log()</script><script>console.log()</script><script type=module>console.log()</script><script type=module>console.log()</script><script>window.jQuery||document.write('<script src="jquery.js"></script>')</script><script type=text/html>
<div>
test
</div>
<!-- aa -->\n
</script><script type="">alert(1)</script><script type=modules>alert(1)</script><script>alert(1);</script><script>alert(1);</script><script type=module src=app.mjs></script><script nomodule defer src=classic-app-bundle.js></script><script>alert(1)</script><script type=text/vbscript>MsgBox("foo bar")</script><script type="">MsgBox("foo bar")</script><script type=;;;;;>MsgBox("foo bar")</script><script>alert(1);</script><script>alert(1);</script><script>alert(1);</script><script>alert(1);</script><script>alert(1);</script><script>alert(1);</script><script>alert(1);</script><script></script>
</script><script type="">alert(1)</script><script type=modules>alert(1)</script><script>alert(1)</script><script>alert(1)</script><script type=module src=app.mjs></script><script nomodule defer src=classic-app-bundle.js></script><script>alert(1)</script><script type=text/vbscript>MsgBox("foo bar")</script><script type="">MsgBox("foo bar")</script><script type=;;;;;>MsgBox("foo bar")</script><script>alert(1)</script><script>alert(1)</script><script>alert(1)</script><script>alert(1)</script><script>alert(1)</script><script>alert(1)</script><script>alert(1)</script><script></script>
Expand Up @@ -8,8 +8,8 @@


<div>baz</div>
<script></script><script>alert(1);</script><style>p{color:red}</style><script>alert(8);</script>
<script>alert(10);</script>
<script></script><script>alert(1)</script><style>p{color:red}</style><script>alert(8)</script>
<script>alert(10)</script>
<!-- @preserve foo -->
<!-- @copyright foo -->
<!-- @lic foo -->
Expand Down
Expand Up @@ -10,8 +10,8 @@
<!-- foo --><div>baz</div><!-- bar

moo -->
<script></script><script>alert(1);</script><style>p{color:red}</style><script>alert(8);</script>
<script>alert(10);</script>
<script></script><script>alert(1)</script><style>p{color:red}</style><script>alert(8)</script>
<script>alert(10)</script>
<!-- @preserve foo -->
<!-- @copyright foo -->
<!-- @lic foo -->
Expand Down
Expand Up @@ -2,7 +2,7 @@


<div>baz</div>
<script></script><script>alert(1);</script><style>p{color:red}</style><script>alert(8);</script>
<script>alert(10);</script>
<script></script><script>alert(1)</script><style>p{color:red}</style><script>alert(8)</script>
<script>alert(10)</script>
<!--! test -->
<!-- ko if: someExpressionGoesHere --><li>test</li><!-- /ko -->
@@ -1,3 +1,3 @@
<!doctype html><html lang=en><title>Document</title><body><script type=text/custom-module>console.log("testtest");</script><script type=text/custom-script>console.log("testtest");</script><script type=text/custom-json>{"foo":"bar"}</script><script type=text/custom-css>a{color:#fff}</script><script type=text/html><div data-foo=bar> <span> foobar </span>
<!doctype html><html lang=en><title>Document</title><body><script type=text/custom-module>console.log("testtest")</script><script type=text/custom-script>console.log("testtest")</script><script type=text/custom-json>{"foo":"bar"}</script><script type=text/custom-css>a{color:#fff}</script><script type=text/html><div data-foo=bar> <span> foobar </span>

</div></script>
Expand Up @@ -11,4 +11,4 @@
"description": "This coffee cake is awesome and perfect for parties.",
"prepTime": "PT20M"
}
</script><script>alert("testtest");</script>
</script><script>alert("testtest")</script>
@@ -1,4 +1,4 @@
<!doctype html><html lang=en><meta charset=UTF-8><meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0"><title>Document</title><form oninput="result.value=parseInt(a.value)+parseInt(b.value);">
<!doctype html><html lang=en><meta charset=UTF-8><meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0"><title>Document</title><form oninput="result.value=parseInt(a.value)+parseInt(b.value)">
<input type=range id=b name=b value=50> +
<input type=number id=a name=a value=10> =
<output name=result for="a b">60</output>
Expand Down
@@ -1,2 +1,2 @@
<!doctype html><html lang=en><title>Document</title><body><script type=module>/* Keep comment */ debugger;// Keep comment
console.log("test \u{1F600} test");</script>
console.log("test \u{1F600} test")</script>
@@ -1,4 +1,4 @@
<!doctype html><title>Party Coffee Cake</title><!--[if lte IE 8]><script>alert("ie8!test");</script><![endif]--><script type=application/ld+json>{"@context":"https://schema.org/","@type":"Recipe","author":{"@type":"Person","name":"Mary Stone"},"datePublished":"2018-03-10","description":"This coffee cake is awesome and perfect for parties.","name":"Party Coffee Cake","prepTime":"PT20M"}</script><script type=application/ld+json crossorigin=anonymous>{"@context":"https://schema.org/","@type":"Recipe","author":{"@type":"Person","name":"Mary Stone"},"datePublished":"2018-03-10","description":"This coffee cake is awesome and perfect for parties.","name":"Party Coffee Cake","prepTime":"PT20M"}</script><script type=application/ld+json crossorigin=anonymous>
<!doctype html><title>Party Coffee Cake</title><!--[if lte IE 8]><script>alert("ie8!test")</script><![endif]--><script type=application/ld+json>{"@context":"https://schema.org/","@type":"Recipe","author":{"@type":"Person","name":"Mary Stone"},"datePublished":"2018-03-10","description":"This coffee cake is awesome and perfect for parties.","name":"Party Coffee Cake","prepTime":"PT20M"}</script><script type=application/ld+json crossorigin=anonymous>{"@context":"https://schema.org/","@type":"Recipe","author":{"@type":"Person","name":"Mary Stone"},"datePublished":"2018-03-10","description":"This coffee cake is awesome and perfect for parties.","name":"Party Coffee Cake","prepTime":"PT20M"}</script><script type=application/ld+json crossorigin=anonymous>
{
broken
</script><script type=unknown>
Expand All @@ -19,15 +19,15 @@

</script><script id=data type=application/json>{"foo":"bar"}</script><script>
broken broken
</script><script>var a=3;</script><script>var a=9;</script><script type=module>import t from"foo.js";let o=58800,e="testtest";</script><script>let e=new Date;alert("Today's date is "+e);</script><script src=javascript.js>
</script><script>var a=3</script><script>var a=9</script><script type=module>import t from"foo.js";let o=58800,e="testtest"</script><script>let e=new Date;alert("Today's date is "+e)</script><script src=javascript.js>



</script><script src=javascript.js>

var q = "WRONG" ;

</script><script>let t="testtest";</script><script>alert("<!--");</script><script>alert("<!-- foo -->");</script><script>alert("-->");</script><script></script><script>alert("testtest");</script><script>function a(){var a=1,n=2;alert(a+" "+n)}</script><script></script><h2>Party coffee cake recipe</h2>
</script><script>let t="testtest"</script><script>alert("<!--")</script><script>alert("<!-- foo -->")</script><script>alert("-->")</script><script></script><script>alert("testtest")</script><script>function a(){var a=1,n=2;alert(a+" "+n)}</script><script></script><h2>Party coffee cake recipe</h2>
<p>
<i>by Mary Stone, 2018-03-10</i>
</p>
Expand All @@ -38,11 +38,11 @@
Preparation time: 20 minutes
</p>
<svg>
<script>alert("test");</script>
<script>alert("test")</script>
<script>alert(1)</script>
</svg>
<svg viewBox="0 0 10 10">
<script>window.addEventListener("DOMContentLoaded",()=>{function t(){let t=Math.round(255*Math.random()).toString(16).padStart(2,"0"),n=Math.round(255*Math.random()).toString(16).padStart(2,"0"),r=Math.round(255*Math.random()).toString(16).padStart(2,"0");return`#${t}${n}${r}`}document.querySelector("circle").addEventListener("click",n=>{n.target.style.fill=t()})});</script>
<script>window.addEventListener("DOMContentLoaded",()=>{function t(){let t=Math.round(255*Math.random()).toString(16).padStart(2,"0"),n=Math.round(255*Math.random()).toString(16).padStart(2,"0"),r=Math.round(255*Math.random()).toString(16).padStart(2,"0");return`#${t}${n}${r}`}document.querySelector("circle").addEventListener("click",n=>{n.target.style.fill=t()})})</script>

<circle cx=5 cy=5 r=4 />
</svg>
Expand All @@ -54,4 +54,4 @@
alert('test')
</script>
</math>
<script blocking="a render">console.log("block");</script><script>(function(t){var t="test"+Math.random()+t,a=1,o=2+Math.random();alert(a+" "+o);console.log(Math.random())})("test");</script>
<script blocking="a render">console.log("block")</script><script>(function(t){var t="test"+Math.random()+t,a=1,o=2+Math.random();alert(a+" "+o);console.log(Math.random())})("test")</script>
Expand Up @@ -278,15 +278,15 @@

<svg viewBox="0 0 220 100">

<rect width=100 height=100 onclick='alert("testtest");'/>
<rect width=100 height=100 onclick='alert("testtest");'/>
<rect width=100 height=100 onclick='alert("testtest")'/>
<rect width=100 height=100 onclick='alert("testtest")'/>


<rect x=120 width=100 height=100 rx=15 />
</svg>

<svg>
<a href=" test.html " ondragexit='alert("testtest");' rel="nofollow noindex">Test</a>
<a href=" test.html " ondragexit='alert("testtest")' rel="nofollow noindex">Test</a>
</svg>

<svg viewBox="0 0 100 100" width=160 height=60 y=30>
Expand Down