mirror of
https://github.com/swc-project/swc.git
synced 2024-10-05 12:49:21 +03:00
fix(es/minifier): Fix regexp handling (#2489)
swc_ecma_minifier: - Use allowlist of characters for optimizing RegExp calls.
This commit is contained in:
parent
eef63ca6db
commit
7c5b6cafd8
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -2678,7 +2678,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "swc_ecma_minifier"
|
||||
version = "0.44.1"
|
||||
version = "0.44.2"
|
||||
dependencies = [
|
||||
"ansi_term 0.12.1",
|
||||
"anyhow",
|
||||
|
@ -7,7 +7,7 @@ include = ["Cargo.toml", "src/**/*.rs", "src/lists/*.json"]
|
||||
license = "Apache-2.0/MIT"
|
||||
name = "swc_ecma_minifier"
|
||||
repository = "https://github.com/swc-project/swc.git"
|
||||
version = "0.44.1"
|
||||
version = "0.44.2"
|
||||
|
||||
[features]
|
||||
debug = ["backtrace"]
|
||||
|
@ -1165,7 +1165,14 @@ where
|
||||
v.spread.is_some()
|
||||
|| match &*v.expr {
|
||||
Expr::Lit(Lit::Str(s)) => {
|
||||
if s.value.contains(|c: char| !c.is_ascii()) {
|
||||
if s.value.contains(|c: char| {
|
||||
// whitelist
|
||||
!c.is_ascii_alphanumeric()
|
||||
&& match c {
|
||||
'%' | '[' | ']' | '(' | ')' | '{' | '}' | '-' | '+' => false,
|
||||
_ => true,
|
||||
}
|
||||
}) {
|
||||
return true;
|
||||
}
|
||||
if s.value.contains("\\\0") || s.value.contains("/") {
|
||||
|
@ -0,0 +1,3 @@
|
||||
export default function () {
|
||||
return new RegExp("{.[^}]+}\n*", "g");
|
||||
};
|
@ -0,0 +1,3 @@
|
||||
export default function() {
|
||||
return new RegExp("{.[^}]+}\n*", "g");
|
||||
};
|
@ -36,7 +36,7 @@
|
||||
registrationNameDependencies[registrationName] && error("EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.", registrationName), registrationNameDependencies[registrationName] = dependencies, possibleRegistrationNames[registrationName.toLowerCase()] = registrationName, "onDoubleClick" === registrationName && (possibleRegistrationNames.ondblclick = registrationName);
|
||||
for(var i = 0; i < dependencies.length; i++)allNativeEvents.add(dependencies[i]);
|
||||
}
|
||||
var canUseDOM = !!("undefined" != typeof window && void 0 !== window.document && void 0 !== window.document.createElement), VALID_ATTRIBUTE_NAME_REGEX = /^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/, hasOwnProperty = Object.prototype.hasOwnProperty, illegalAttributeNameCache = {
|
||||
var canUseDOM = !!("undefined" != typeof window && void 0 !== window.document && void 0 !== window.document.createElement), VALID_ATTRIBUTE_NAME_REGEX = new RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"), hasOwnProperty = Object.prototype.hasOwnProperty, illegalAttributeNameCache = {
|
||||
}, validatedAttributeNameCache = {
|
||||
};
|
||||
function isAttributeNameSafe(attributeName) {
|
||||
@ -1854,7 +1854,7 @@
|
||||
"aria-rowspan": 0,
|
||||
"aria-setsize": 0
|
||||
}, warnedProperties = {
|
||||
}, rARIA = /^(aria)-[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/, rARIACamel = /^(aria)[A-Z][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/, hasOwnProperty$1 = Object.prototype.hasOwnProperty;
|
||||
}, rARIA = new RegExp("^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"), rARIACamel = new RegExp("^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"), hasOwnProperty$1 = Object.prototype.hasOwnProperty;
|
||||
function validateProperty(tagName, name) {
|
||||
if (hasOwnProperty$1.call(warnedProperties, name) && warnedProperties[name]) return !0;
|
||||
if (rARIACamel.test(name)) {
|
||||
@ -1871,7 +1871,7 @@
|
||||
}
|
||||
var didWarnValueNull = !1, validateProperty$1 = function() {
|
||||
}, warnedProperties$1 = {
|
||||
}, _hasOwnProperty = Object.prototype.hasOwnProperty, EVENT_NAME_REGEX = /^on./, INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/, rARIA$1 = /^(aria)-[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/, rARIACamel$1 = /^(aria)[A-Z][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/;
|
||||
}, _hasOwnProperty = Object.prototype.hasOwnProperty, EVENT_NAME_REGEX = /^on./, INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/, rARIA$1 = new RegExp("^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"), rARIACamel$1 = new RegExp("^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$");
|
||||
validateProperty$1 = function(tagName, name, value, eventRegistry) {
|
||||
if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) return !0;
|
||||
var lowerCasedName = name.toLowerCase();
|
||||
|
3
tests/vercel/full/regexp/1/input/index.js
Normal file
3
tests/vercel/full/regexp/1/input/index.js
Normal file
@ -0,0 +1,3 @@
|
||||
export default function () {
|
||||
return new RegExp(`{.[^}]+}\n*`, "g")
|
||||
}
|
3
tests/vercel/full/regexp/1/output/index.js
Normal file
3
tests/vercel/full/regexp/1/output/index.js
Normal file
@ -0,0 +1,3 @@
|
||||
export default function() {
|
||||
return new RegExp("{.[^}]+}\n*", "g");
|
||||
};
|
3
tests/vercel/loader-only/regexp/1/input/index.js
Normal file
3
tests/vercel/loader-only/regexp/1/input/index.js
Normal file
@ -0,0 +1,3 @@
|
||||
export default function () {
|
||||
return new RegExp(`{.[^}]+}\n*`, "g")
|
||||
}
|
3
tests/vercel/loader-only/regexp/1/output/index.js
Normal file
3
tests/vercel/loader-only/regexp/1/output/index.js
Normal file
@ -0,0 +1,3 @@
|
||||
export default function() {
|
||||
return new RegExp("{.[^}]+}\n*", "g");
|
||||
};
|
Loading…
Reference in New Issue
Block a user