mirror of
https://github.com/github/codeql.git
synced 2026-04-28 18:25:24 +02:00
support basic generators
This commit is contained in:
@@ -27,6 +27,7 @@ import semmle.javascript.Extend
|
||||
import semmle.javascript.Externs
|
||||
import semmle.javascript.Files
|
||||
import semmle.javascript.Functions
|
||||
import semmle.javascript.Generators
|
||||
import semmle.javascript.GlobalAccessPaths
|
||||
import semmle.javascript.HTML
|
||||
import semmle.javascript.HtmlSanitizers
|
||||
|
||||
21
javascript/ql/src/semmle/javascript/Generators.qll
Normal file
21
javascript/ql/src/semmle/javascript/Generators.qll
Normal file
@@ -0,0 +1,21 @@
|
||||
import javascript
|
||||
private import semmle.javascript.dataflow.internal.PreCallGraphStep
|
||||
|
||||
/**
|
||||
* Classes and predicates for modelling data-flow for generator functions.
|
||||
*/
|
||||
private module GeneratorDataFlow {
|
||||
private import DataFlow::PseudoProperties
|
||||
|
||||
private class ArrayIteration extends PreCallGraphStep {
|
||||
override predicate storeStep(DataFlow::Node pred, DataFlow::SourceNode succ, string prop) {
|
||||
exists(DataFlow::FunctionNode f | f.getFunction().isGenerator() |
|
||||
prop = iteratorElement() and
|
||||
exists(YieldExpr yield | yield.getContainer() = f.getFunction() |
|
||||
pred.asExpr() = yield.getOperand()
|
||||
) and
|
||||
succ = f.getReturnNode()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
yield source;
|
||||
}
|
||||
for (const x of gen1()) {
|
||||
sink(x); // NOT OK - but not found yet [INCONSISTENCY]
|
||||
sink(x); // NOT OK
|
||||
}
|
||||
|
||||
function *gen2() {
|
||||
|
||||
Reference in New Issue
Block a user