4.4 KiB
Improvements to JavaScript analysis
General improvements
-
Automatic classification of test files has been improved, in particular
__tests__
and__mocks__
folders (as used by Jest) are now recognized. -
Support for the following frameworks and libraries has been improved:
-
Support for tracking data flow and taint through getter functions (that is, functions that return a property of one of their arguments) and through the receiver object of method calls has been improved. This may produce more security alerts.
-
Taint tracking through object property names has been made more precise, resulting in fewer false positive results.
-
Method calls are now resolved in more cases, due to improved class hierarchy analysis. This may produce more security alerts.
-
Jump-to-definition now resolves calls to their definition in more cases, and supports jumping from a JSDoc type annotation to its definition.
New queries
Query | Tags | Purpose |
---|---|---|
Indirect uncontrolled command line (js/indirect-command-line-injection ) |
correctness, security, external/cwe/cwe-078, external/cwe/cwe-088 | Highlights command-line invocations that may indirectly introduce a command-line injection vulnerability elsewhere, indicating a possible violation of CWE-78. Results are not shown on LGTM by default. |
Changes to existing queries
Query | Expected impact | Change |
---|---|---|
Conflicting HTML element attributes (js/conflicting-html-attribute ) |
No changes to results | Results are no longer shown on LGTM by default. |
Shift out of range (js/shift-out-of-range |
Fewer false positive results | This rule now correctly handles BigInt shift operands. |
Superfluous trailing arguments (js/superfluous-trailing-arguments ) |
Fewer false-positive results. | This rule no longer flags calls to placeholder functions that trivially throw an exception. |
Undocumented parameter (js/jsdoc/missing-parameter ) |
No changes to results | This rule is now run on LGTM, although its results are still not shown by default. |
Missing space in string concatenation (js/missing-space-in-concatenation ) |
Fewer false positive results | The rule now requires a word-like part exists in the string concatenation. |
Changes to QL libraries
- The
getName()
predicate on functions and classes now gets a name that is inferred from the context if the function or class was not declared with a name. - The two-argument and three-argument variants of
DataFlow::Configuration::isBarrier
andTaintTracking::Configuration::isSanitizer
have been deprecated. Overriding them no longer has any effect. UseisBarrierEdge
andisSanitizerEdge
instead. - The QLDoc for most AST classes have been expanded with concrete syntax examples.
- Tutorials on how to use flow labels and type tracking have been published, as well as a data flow cheat sheet for quick reference.