diff --git a/javascript/change-notes/2021-01-21-unneeded-defensive-code.md b/javascript/change-notes/2021-01-21-unneeded-defensive-code.md new file mode 100644 index 00000000000..c4c8573db46 --- /dev/null +++ b/javascript/change-notes/2021-01-21-unneeded-defensive-code.md @@ -0,0 +1,2 @@ +lgtm,codescanning +* The query "Unneeded defensive code" (`js/unneeded-defensive-code`) no longer flags uses of function parameters. diff --git a/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql b/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql index 810f48e2275..8e5cd8cf431 100644 --- a/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql +++ b/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql @@ -51,5 +51,8 @@ where or // too benign in practice e instanceof DefensiveExpressionTest::DefensiveInit + or + // functions might be written overly general + e.getALocalSource() instanceof DataFlow::ParameterNode ) select e, "This guard always evaluates to " + cv + "." diff --git a/javascript/ql/test/query-tests/Expressions/UnneededDefensiveProgramming/tst.js b/javascript/ql/test/query-tests/Expressions/UnneededDefensiveProgramming/tst.js index 3033a9e0c92..ace5a3dd7ac 100644 --- a/javascript/ql/test/query-tests/Expressions/UnneededDefensiveProgramming/tst.js +++ b/javascript/ql/test/query-tests/Expressions/UnneededDefensiveProgramming/tst.js @@ -176,4 +176,11 @@ u && (u.p, f()); // technically not OK, but it seems like an unlikely pattern u && !u.p; // NOT OK u && !u(); // NOT OK + + + function hasCallbacks(success, error) { + if (success) success() + if (error) error() + } + hasCallbacks(() => {}, null); });