diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2020-12-19 18:31:09 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-20 02:31:09 +0800 |
commit | 2c9c72e06c674ae313001d0b5878fe2ccfc31492 (patch) | |
tree | 3404f83634dbc9c6a2419cb5dded1f72b5940b05 | |
parent | 882968c68c79a0f285d59f4b7ea50a62dc9ba1b6 (diff) | |
download | tracifyjs-2c9c72e06c674ae313001d0b5878fe2ccfc31492.tar.gz tracifyjs-2c9c72e06c674ae313001d0b5878fe2ccfc31492.zip |
suppress false positives in `ufuzz` (#4419)
-rw-r--r-- | README.md | 10 | ||||
-rw-r--r-- | test/ufuzz/index.js | 13 |
2 files changed, 15 insertions, 8 deletions
@@ -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"; |