suppress false positives in ufuzz (#4419)

This commit is contained in:
Alex Lam S.L
2020-12-19 18:31:09 +00:00
committed by GitHub
parent 882968c68c
commit 2c9c72e06c
2 changed files with 15 additions and 8 deletions

View File

@@ -1217,3 +1217,13 @@ To allow for better optimizations, the compiler makes various assumptions:
// SyntaxError: Identifier 'a' has already been declared // SyntaxError: Identifier 'a' has already been declared
``` ```
UglifyJS may modify the input which in turn may suppress those errors. 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.

View File

@@ -862,16 +862,15 @@ function createStatement(recurmax, canThrow, canBreak, canContinue, cannotReturn
var block_len = block_vars.length; var block_len = block_vars.length;
var nameLenBefore = VAR_NAMES.length; var nameLenBefore = VAR_NAMES.length;
var unique_len = unique_vars.length; var unique_len = unique_vars.length;
var offset = SUPPORT.catch_omit_var ? 0 : SUPPORT.destructuring ? 1 : 2; if (SUPPORT.catch_omit_var && !rng(20)) {
switch (offset + rng(20 - offset)) {
case 0:
s += " catch { "; s += " catch { ";
break; } else if (canThrow && SUPPORT.destructuring && !rng(20)) {
case 1: unique_vars.push("a", "b", "c", "undefined", "NaN", "Infinity");
var name = createVarName(MANDATORY); var name = createVarName(MANDATORY);
block_vars.push(name); block_vars.push(name);
var message = createVarName(MANDATORY); var message = createVarName(MANDATORY);
block_vars.push(message); block_vars.push(message);
unique_vars.length -= 6;
if (SUPPORT.computed_key && rng(10) == 0) { if (SUPPORT.computed_key && rng(10) == 0) {
s += " catch ({ message: " + message + ", "; s += " catch ({ message: " + message + ", ";
addAvoidVars([ name ]); addAvoidVars([ name ]);
@@ -881,12 +880,10 @@ function createStatement(recurmax, canThrow, canBreak, canContinue, cannotReturn
} else { } else {
s += " catch ({ name: " + name + ", message: " + message + " }) { "; s += " catch ({ name: " + name + ", message: " + message + " }) { ";
} }
break; } else {
default:
var name = createVarName(MANDATORY); var name = createVarName(MANDATORY);
if (!catch_redef) unique_vars.push(name); if (!catch_redef) unique_vars.push(name);
s += " catch (" + name + ") { "; s += " catch (" + name + ") { ";
break;
} }
var catches = VAR_NAMES.length - nameLenBefore; var catches = VAR_NAMES.length - nameLenBefore;
s += defns() + "\n"; s += defns() + "\n";