aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2020-12-19 18:31:09 +0000
committerGitHub <noreply@github.com>2020-12-20 02:31:09 +0800
commit2c9c72e06c674ae313001d0b5878fe2ccfc31492 (patch)
tree3404f83634dbc9c6a2419cb5dded1f72b5940b05
parent882968c68c79a0f285d59f4b7ea50a62dc9ba1b6 (diff)
downloadtracifyjs-2c9c72e06c674ae313001d0b5878fe2ccfc31492.tar.gz
tracifyjs-2c9c72e06c674ae313001d0b5878fe2ccfc31492.zip
suppress false positives in `ufuzz` (#4419)
-rw-r--r--README.md10
-rw-r--r--test/ufuzz/index.js13
2 files changed, 15 insertions, 8 deletions
diff --git a/README.md b/README.md
index 4753b4c2..c23116bd 100644
--- a/README.md
+++ b/README.md
@@ -1217,3 +1217,13 @@ To allow for better optimizations, the compiler makes various assumptions:
// SyntaxError: Identifier 'a' has already been declared
```
UglifyJS may modify the input which in turn may suppress those errors.
+- Later versions of JavaScript will throw `SyntaxError` with the following:
+ ```js
+ try {
+ // ...
+ } catch ({ message: a }) {
+ var a;
+ }
+ // SyntaxError: Identifier 'a' has already been declared
+ ```
+ UglifyJS may modify the input which in turn may suppress those errors.
diff --git a/test/ufuzz/index.js b/test/ufuzz/index.js
index 848b22bc..77a69a51 100644
--- a/test/ufuzz/index.js
+++ b/test/ufuzz/index.js
@@ -862,16 +862,15 @@ function createStatement(recurmax, canThrow, canBreak, canContinue, cannotReturn
var block_len = block_vars.length;
var nameLenBefore = VAR_NAMES.length;
var unique_len = unique_vars.length;
- var offset = SUPPORT.catch_omit_var ? 0 : SUPPORT.destructuring ? 1 : 2;
- switch (offset + rng(20 - offset)) {
- case 0:
+ if (SUPPORT.catch_omit_var && !rng(20)) {
s += " catch { ";
- break;
- case 1:
+ } else if (canThrow && SUPPORT.destructuring && !rng(20)) {
+ unique_vars.push("a", "b", "c", "undefined", "NaN", "Infinity");
var name = createVarName(MANDATORY);
block_vars.push(name);
var message = createVarName(MANDATORY);
block_vars.push(message);
+ unique_vars.length -= 6;
if (SUPPORT.computed_key && rng(10) == 0) {
s += " catch ({ message: " + message + ", ";
addAvoidVars([ name ]);
@@ -881,12 +880,10 @@ function createStatement(recurmax, canThrow, canBreak, canContinue, cannotReturn
} else {
s += " catch ({ name: " + name + ", message: " + message + " }) { ";
}
- break;
- default:
+ } else {
var name = createVarName(MANDATORY);
if (!catch_redef) unique_vars.push(name);
s += " catch (" + name + ") { ";
- break;
}
var catches = VAR_NAMES.length - nameLenBefore;
s += defns() + "\n";