mirror of
https://github.com/github/codeql.git
synced 2025-12-22 03:36:30 +01:00
JS: fix most ql/missing-parameter-qldoc issues
This commit is contained in:
@@ -146,7 +146,7 @@ class BasicBlock extends @cfg_node, NodeInStmtContainer {
|
|||||||
/** Holds if this basic block uses variable `v` in its `i`th node `u`. */
|
/** Holds if this basic block uses variable `v` in its `i`th node `u`. */
|
||||||
predicate useAt(int i, Variable v, VarUse u) { useAt(this, i, v, u) }
|
predicate useAt(int i, Variable v, VarUse u) { useAt(this, i, v, u) }
|
||||||
|
|
||||||
/** Holds if this basic block defines variable `v` in its `i`th node `u`. */
|
/** Holds if this basic block defines variable `v` in its `i`th node `d`. */
|
||||||
predicate defAt(int i, Variable v, VarDef d) { defAt(this, i, v, d) }
|
predicate defAt(int i, Variable v, VarDef d) { defAt(this, i, v, d) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ module CharacterEscapes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a character in `n` that is preceded by a single useless backslash, resulting in a likely regular expression mistake explained by `mistake`.
|
* Gets a character in `src` that is preceded by a single useless backslash, resulting in a likely regular expression mistake explained by `mistake`.
|
||||||
*
|
*
|
||||||
* The character is the `i`th character of the raw string value of `rawStringNode`.
|
* The character is the `i`th character of the raw string value of `rawStringNode`.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -337,7 +337,7 @@ class BulkReExportDeclaration extends ReExportDeclaration, @export_all_declarati
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if the given bulk export should not re-export `name` because there is an explicit export
|
* Holds if the given bulk export `reExport` should not re-export `name` because there is an explicit export
|
||||||
* of that name in the same module.
|
* of that name in the same module.
|
||||||
*
|
*
|
||||||
* At compile time, shadowing works across declaration spaces.
|
* At compile time, shadowing works across declaration spaces.
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ private Path resolveUpTo(PathString p, int n, Folder root, boolean inTS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the `i`th component of the path `str`, where `base` is the resolved path one level up.
|
* Gets the `n`th component of the path `str`, where `base` is the resolved path one level up.
|
||||||
* Supports that the root directory might be compiled output from TypeScript.
|
* Supports that the root directory might be compiled output from TypeScript.
|
||||||
* `inTS` is true if the result is TypeScript that is compiled into the path specified by `str`.
|
* `inTS` is true if the result is TypeScript that is compiled into the path specified by `str`.
|
||||||
*/
|
*/
|
||||||
@@ -227,7 +227,7 @@ private module TypeScriptOutDir {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the `outDir` option from a tsconfig file from the folder `parent`.
|
* Gets the "outDir" option from a `tsconfig` file from the folder `parent`.
|
||||||
*/
|
*/
|
||||||
private string getOutDir(JsonObject tsconfig, Folder parent) {
|
private string getOutDir(JsonObject tsconfig, Folder parent) {
|
||||||
tsconfig.getFile().getBaseName().regexpMatch("tsconfig.*\\.json") and
|
tsconfig.getFile().getBaseName().regexpMatch("tsconfig.*\\.json") and
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ module RangeAnalysis {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if the given comparison can be modeled as `A <op> B + bias` where `<op>` is the comparison operator,
|
* Holds if the given `comparison` can be modeled as `A <op> B + bias` where `<op>` is the comparison operator,
|
||||||
* and `A` is `a * asign` and likewise `B` is `b * bsign`.
|
* and `A` is `a * asign` and likewise `B` is `b * bsign`.
|
||||||
*/
|
*/
|
||||||
predicate linearComparison(
|
predicate linearComparison(
|
||||||
@@ -310,18 +310,18 @@ module RangeAnalysis {
|
|||||||
* Holds if `guard` asserts that the outcome of `A <op> B + bias` is true, where `<op>` is a comparison operator.
|
* Holds if `guard` asserts that the outcome of `A <op> B + bias` is true, where `<op>` is a comparison operator.
|
||||||
*/
|
*/
|
||||||
predicate linearComparisonGuard(
|
predicate linearComparisonGuard(
|
||||||
ConditionGuardNode guard, DataFlow::Node a, int asign, string operator, DataFlow::Node b,
|
ConditionGuardNode guard, DataFlow::Node a, int asign, string op, DataFlow::Node b, int bsign,
|
||||||
int bsign, Bias bias
|
Bias bias
|
||||||
) {
|
) {
|
||||||
exists(Comparison compare |
|
exists(Comparison compare |
|
||||||
compare = guard.getTest().flow().getImmediatePredecessor*().asExpr() and
|
compare = guard.getTest().flow().getImmediatePredecessor*().asExpr() and
|
||||||
linearComparison(compare, a, asign, b, bsign, bias) and
|
linearComparison(compare, a, asign, b, bsign, bias) and
|
||||||
(
|
(
|
||||||
guard.getOutcome() = true and operator = compare.getOperator()
|
guard.getOutcome() = true and op = compare.getOperator()
|
||||||
or
|
or
|
||||||
not hasNaNIndicator(guard.getContainer()) and
|
not hasNaNIndicator(guard.getContainer()) and
|
||||||
guard.getOutcome() = false and
|
guard.getOutcome() = false and
|
||||||
operator = negateOperator(compare.getOperator())
|
op = negateOperator(compare.getOperator())
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -657,13 +657,13 @@ module RangeAnalysis {
|
|||||||
*/
|
*/
|
||||||
pragma[noopt]
|
pragma[noopt]
|
||||||
private predicate reachableByNegativeEdges(
|
private predicate reachableByNegativeEdges(
|
||||||
DataFlow::Node a, int asign, DataFlow::Node b, int bsign, ControlFlowNode cfg
|
DataFlow::Node src, int asign, DataFlow::Node dst, int bsign, ControlFlowNode cfg
|
||||||
) {
|
) {
|
||||||
negativeEdge(a, asign, b, bsign, cfg)
|
negativeEdge(src, asign, dst, bsign, cfg)
|
||||||
or
|
or
|
||||||
exists(DataFlow::Node mid, int midx, ControlFlowNode midcfg |
|
exists(DataFlow::Node mid, int midx, ControlFlowNode midcfg |
|
||||||
reachableByNegativeEdges(a, asign, mid, midx, cfg) and
|
reachableByNegativeEdges(src, asign, mid, midx, cfg) and
|
||||||
negativeEdge(mid, midx, b, bsign, midcfg) and
|
negativeEdge(mid, midx, dst, bsign, midcfg) and
|
||||||
exists(BasicBlock bb, int i, int j |
|
exists(BasicBlock bb, int i, int j |
|
||||||
bb.getNode(i) = midcfg and
|
bb.getNode(i) = midcfg and
|
||||||
bb.getNode(j) = cfg and
|
bb.getNode(j) = cfg and
|
||||||
@@ -676,8 +676,8 @@ module RangeAnalysis {
|
|||||||
DataFlow::Node mid, int midx, ControlFlowNode midcfg, BasicBlock midBB,
|
DataFlow::Node mid, int midx, ControlFlowNode midcfg, BasicBlock midBB,
|
||||||
ReachableBasicBlock midRBB, BasicBlock cfgBB
|
ReachableBasicBlock midRBB, BasicBlock cfgBB
|
||||||
|
|
|
|
||||||
reachableByNegativeEdges(a, asign, mid, midx, cfg) and
|
reachableByNegativeEdges(src, asign, mid, midx, cfg) and
|
||||||
negativeEdge(mid, midx, b, bsign, midcfg) and
|
negativeEdge(mid, midx, dst, bsign, midcfg) and
|
||||||
midBB = midcfg.getBasicBlock() and
|
midBB = midcfg.getBasicBlock() and
|
||||||
midRBB = midBB.(ReachableBasicBlock) and
|
midRBB = midBB.(ReachableBasicBlock) and
|
||||||
cfgBB = cfg.getBasicBlock() and
|
cfgBB = cfg.getBasicBlock() and
|
||||||
|
|||||||
@@ -501,7 +501,7 @@ class SsaExplicitDefinition extends SsaDefinition, TExplicitDef {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** This SSA definition corresponds to the definition of `v` at `def`. */
|
/** This SSA definition corresponds to the definition of `v` at `def`. */
|
||||||
predicate defines(VarDef d, SsaSourceVariable v) { this = TExplicitDef(_, _, d, v) }
|
predicate defines(VarDef def, SsaSourceVariable v) { this = TExplicitDef(_, _, def, v) }
|
||||||
|
|
||||||
/** Gets the variable definition wrapped by this SSA definition. */
|
/** Gets the variable definition wrapped by this SSA definition. */
|
||||||
VarDef getDef() { this = TExplicitDef(_, _, result, _) }
|
VarDef getDef() { this = TExplicitDef(_, _, result, _) }
|
||||||
|
|||||||
@@ -353,7 +353,7 @@ abstract class BarrierGuardNode extends DataFlow::Node {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if data flow node `nd` acts as a barrier for data flow.
|
* Holds if data flow node `guard` acts as a barrier for data flow.
|
||||||
*
|
*
|
||||||
* `label` is bound to the blocked label, or the empty string if all labels should be blocked.
|
* `label` is bound to the blocked label, or the empty string if all labels should be blocked.
|
||||||
*/
|
*/
|
||||||
@@ -382,7 +382,7 @@ private predicate barrierGuardIsRelevant(BarrierGuardNode guard) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if data flow node `nd` acts as a barrier for data flow due to aliasing through
|
* Holds if data flow node `guard` acts as a barrier for data flow due to aliasing through
|
||||||
* an access path.
|
* an access path.
|
||||||
*
|
*
|
||||||
* `label` is bound to the blocked label, or the empty string if all labels should be blocked.
|
* `label` is bound to the blocked label, or the empty string if all labels should be blocked.
|
||||||
@@ -1155,7 +1155,7 @@ private predicate appendStep(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if a function invoked at `invk` may return an expression into which `input`,
|
* Holds if a function invoked at `output` may return an expression into which `input`,
|
||||||
* which is either an argument or a definition captured by the function, flows under
|
* which is either an argument or a definition captured by the function, flows under
|
||||||
* configuration `cfg`, possibly through callees.
|
* configuration `cfg`, possibly through callees.
|
||||||
*/
|
*/
|
||||||
@@ -1391,7 +1391,7 @@ private predicate reachableFromStoreBase(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if `base` is the base of a write to property `prop`, and `nd` is reachable
|
* Holds if `base` is the base of a write to property `endProp`, and `nd` is reachable
|
||||||
* from `base` under configuration `cfg` (possibly through callees) along a path whose
|
* from `base` under configuration `cfg` (possibly through callees) along a path whose
|
||||||
* last step is summarized by `newSummary`, and the previous steps are summarized
|
* last step is summarized by `newSummary`, and the previous steps are summarized
|
||||||
* by `oldSummary`.
|
* by `oldSummary`.
|
||||||
@@ -1752,7 +1752,7 @@ class PathNode extends TPathNode {
|
|||||||
this = MkSinkNode(nd, cfg)
|
this = MkSinkNode(nd, cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Holds if this path node wraps data-flow node `nd` and configuration `c`. */
|
/** Holds if this path node wraps data-flow node `n` and configuration `c`. */
|
||||||
predicate wraps(DataFlow::Node n, DataFlow::Configuration c) { nd = n and cfg = c }
|
predicate wraps(DataFlow::Node n, DataFlow::Configuration c) { nd = n and cfg = c }
|
||||||
|
|
||||||
/** Gets the underlying configuration of this path node. */
|
/** Gets the underlying configuration of this path node. */
|
||||||
@@ -1867,7 +1867,7 @@ class MidPathNode extends PathNode, MkMidNode {
|
|||||||
|
|
||||||
MidPathNode() { this = MkMidNode(nd, cfg, summary) }
|
MidPathNode() { this = MkMidNode(nd, cfg, summary) }
|
||||||
|
|
||||||
/** Holds if this path node wraps data-flow node `nd`, configuration `c` and summary `s`. */
|
/** Holds if this path node wraps data-flow node `n`, configuration `c` and summary `s`. */
|
||||||
predicate wraps(DataFlow::Node n, DataFlow::Configuration c, PathSummary s) {
|
predicate wraps(DataFlow::Node n, DataFlow::Configuration c, PathSummary s) {
|
||||||
nd = n and cfg = c and summary = s
|
nd = n and cfg = c and summary = s
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1613,7 +1613,7 @@ module DataFlow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if the flow information for this node is incomplete.
|
* Holds if the flow information for the node `nd`.
|
||||||
*
|
*
|
||||||
* This predicate holds if there may be a source flow node from which data flows into
|
* This predicate holds if there may be a source flow node from which data flows into
|
||||||
* this node, but that node is not a result of `getALocalSource()` due to analysis incompleteness.
|
* this node, but that node is not a result of `getALocalSource()` due to analysis incompleteness.
|
||||||
|
|||||||
@@ -498,7 +498,7 @@ private module ReturnPortal {
|
|||||||
invk = callee.getAnExitNode(isRemote).getAnInvocation()
|
invk = callee.getAnExitNode(isRemote).getAnInvocation()
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Holds if `ret` is a return node of a function flowing through `callee`. */
|
/** Holds if `ret` is a return node of a function flowing through `base`. */
|
||||||
predicate returns(Portal base, DataFlow::Node ret, boolean escapes) {
|
predicate returns(Portal base, DataFlow::Node ret, boolean escapes) {
|
||||||
ret = base.getAnEntryNode(escapes).getALocalSource().(DataFlow::FunctionNode).getAReturn()
|
ret = base.getAnEntryNode(escapes).getALocalSource().(DataFlow::FunctionNode).getAReturn()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -831,7 +831,7 @@ module TaintTracking {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if the property `loadStep` should be copied from the object `pred` to the property `storeStep` of object `succ`.
|
* Holds if the property `loadProp` should be copied from the object `pred` to the property `storeProp` of object `succ`.
|
||||||
*
|
*
|
||||||
* This step is used to copy the value of our pseudo-property that can later be accessed using a `get` or `getAll` call.
|
* This step is used to copy the value of our pseudo-property that can later be accessed using a `get` or `getAll` call.
|
||||||
* For an expression `url.searchParams`, the property `hiddenUrlPseudoProperty()` from the `url` object is stored in the property `getableUrlPseudoProperty()` on `url.searchParams`.
|
* For an expression `url.searchParams`, the property `hiddenUrlPseudoProperty()` from the `url` object is stored in the property `getableUrlPseudoProperty()` on `url.searchParams`.
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ import javascript
|
|||||||
abstract class NgSourceProvider extends Locatable {
|
abstract class NgSourceProvider extends Locatable {
|
||||||
/**
|
/**
|
||||||
* Holds if this element provides the source as `src` for an AngularJS expression at the specified location.
|
* Holds if this element provides the source as `src` for an AngularJS expression at the specified location.
|
||||||
* The location spans column `startcolumn` of line `startline` to
|
* The location spans column `startColumn` of line `startLine` to
|
||||||
* column `endcolumn` of line `endline` in file `filepath`.
|
* column `endColumn` of line `endLine` in file `filepath`.
|
||||||
*/
|
*/
|
||||||
abstract predicate providesSourceAt(
|
abstract predicate providesSourceAt(
|
||||||
string src, string path, int startLine, int startColumn, int endLine, int endColumn
|
string src, string filepath, int startLine, int startColumn, int endLine, int endColumn
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -278,11 +278,11 @@ abstract private class CustomSpecialServiceDefinition extends CustomServiceDefin
|
|||||||
bindingset[moduleMethodName]
|
bindingset[moduleMethodName]
|
||||||
private predicate isCustomServiceDefinitionOnModule(
|
private predicate isCustomServiceDefinitionOnModule(
|
||||||
DataFlow::CallNode mce, string moduleMethodName, string serviceName,
|
DataFlow::CallNode mce, string moduleMethodName, string serviceName,
|
||||||
DataFlow::Node factoryArgument
|
DataFlow::Node factoryFunction
|
||||||
) {
|
) {
|
||||||
mce = moduleRef(_).getAMethodCall(moduleMethodName) and
|
mce = moduleRef(_).getAMethodCall(moduleMethodName) and
|
||||||
mce.getArgument(0).asExpr().mayHaveStringValue(serviceName) and
|
mce.getArgument(0).asExpr().mayHaveStringValue(serviceName) and
|
||||||
factoryArgument = mce.getArgument(1)
|
factoryFunction = mce.getArgument(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
pragma[inline]
|
pragma[inline]
|
||||||
|
|||||||
@@ -299,7 +299,7 @@ module Fastify {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if `rh` uses `plugin`.
|
* Holds if `rh` uses `middleware`.
|
||||||
*/
|
*/
|
||||||
private predicate usesMiddleware(RouteHandler rh, DataFlow::SourceNode middleware) {
|
private predicate usesMiddleware(RouteHandler rh, DataFlow::SourceNode middleware) {
|
||||||
exists(RouteSetup setup |
|
exists(RouteSetup setup |
|
||||||
|
|||||||
@@ -474,17 +474,17 @@ module NodeJSLib {
|
|||||||
* that receives the data.
|
* that receives the data.
|
||||||
*
|
*
|
||||||
* We determine this by looking for an externs declaration for
|
* We determine this by looking for an externs declaration for
|
||||||
* `fs.methodName` where the `i`th parameter's name is `data` or
|
* `fs.methodName` where the `i`th parameter's name (`paramName`) is `data` or
|
||||||
* `buffer` or a `callback`.
|
* `buffer` or a `callback`.
|
||||||
*/
|
*/
|
||||||
private predicate fsDataParam(string methodName, int i, string n) {
|
private predicate fsDataParam(string methodName, int i, string paramName) {
|
||||||
exists(ExternalMemberDecl decl, Function f, JSDocParamTag p |
|
exists(ExternalMemberDecl decl, Function f, JSDocParamTag p |
|
||||||
decl.hasQualifiedName("fs", methodName) and
|
decl.hasQualifiedName("fs", methodName) and
|
||||||
f = decl.getInit() and
|
f = decl.getInit() and
|
||||||
p.getDocumentedParameter() = f.getParameter(i).getAVariable() and
|
p.getDocumentedParameter() = f.getParameter(i).getAVariable() and
|
||||||
n = p.getName().toLowerCase()
|
paramName = p.getName().toLowerCase()
|
||||||
|
|
|
|
||||||
n = "data" or n = "buffer" or n = "callback"
|
paramName = ["data", "buffer", "callback"]
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ abstract class ReDoSConfiguration extends string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if repeating `pump' starting at `state` is a candidate for causing backtracking.
|
* Holds if repeating `pump` starting at `state` is a candidate for causing backtracking.
|
||||||
* No check whether a rejected suffix exists has been made.
|
* No check whether a rejected suffix exists has been made.
|
||||||
*/
|
*/
|
||||||
private predicate isReDoSCandidate(State state, string pump) {
|
private predicate isReDoSCandidate(State state, string pump) {
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ predicate maybeAssignsAccessedPropInBlock(DataFlow::PropWrite assign, boolean af
|
|||||||
*/
|
*/
|
||||||
private module PurityCheck {
|
private module PurityCheck {
|
||||||
/**
|
/**
|
||||||
* Holds if a ControlFlowNode `c` is before an impure expression inside `bb`.
|
* Holds if `write` is before an impure expression inside `bb`.
|
||||||
*/
|
*/
|
||||||
predicate isBeforeImpure(DataFlow::PropWrite write, ReachableBasicBlock bb) {
|
predicate isBeforeImpure(DataFlow::PropWrite write, ReachableBasicBlock bb) {
|
||||||
getANodeAfterWrite(write, bb).(Expr).isImpure()
|
getANodeAfterWrite(write, bb).(Expr).isImpure()
|
||||||
@@ -181,7 +181,7 @@ private module PurityCheck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if a ControlFlowNode `c` is after an impure expression inside `bb`.
|
* Holds if `write` is after an impure expression inside `bb`.
|
||||||
*/
|
*/
|
||||||
predicate isAfterImpure(DataFlow::PropWrite write, ReachableBasicBlock bb) {
|
predicate isAfterImpure(DataFlow::PropWrite write, ReachableBasicBlock bb) {
|
||||||
getANodeBeforeWrite(write, bb).(Expr).isImpure()
|
getANodeBeforeWrite(write, bb).(Expr).isImpure()
|
||||||
|
|||||||
@@ -84,10 +84,10 @@ predicate hasObjectProvidingTemplateVariables(CandidateStringLiteral lit) {
|
|||||||
* Gets a declaration of variable `v` in `tl`, where `v` has the given `name` and
|
* Gets a declaration of variable `v` in `tl`, where `v` has the given `name` and
|
||||||
* belongs to `scope`.
|
* belongs to `scope`.
|
||||||
*/
|
*/
|
||||||
VarDecl getDeclIn(Variable v, Scope s, string name, CandidateTopLevel tl) {
|
VarDecl getDeclIn(Variable v, Scope scope, string name, CandidateTopLevel tl) {
|
||||||
v.getName() = name and
|
v.getName() = name and
|
||||||
v.getADeclaration() = result and
|
v.getADeclaration() = result and
|
||||||
v.getScope() = s and
|
v.getScope() = scope and
|
||||||
result.getTopLevel() = tl
|
result.getTopLevel() = tl
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import javascript
|
import javascript
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if `nd` is a use of a feature introduced in ECMAScript version `ver`
|
* Holds if `nd` is a use of a feature introduced in ECMAScript `version`
|
||||||
* from the given category.
|
* from the given category.
|
||||||
*
|
*
|
||||||
* Categories are taken from Kangax' [ECMAScript 6 compatibility table]
|
* Categories are taken from Kangax' [ECMAScript 6 compatibility table]
|
||||||
|
|||||||
@@ -16,14 +16,14 @@ import javascript
|
|||||||
/**
|
/**
|
||||||
* Holds if `assign` assigns the value of `nd` to `exportsVar`, which is an `exports` variable
|
* Holds if `assign` assigns the value of `nd` to `exportsVar`, which is an `exports` variable
|
||||||
*/
|
*/
|
||||||
predicate exportsAssign(Assignment assgn, Variable exportsVar, DataFlow::Node nd) {
|
predicate exportsAssign(Assignment assign, Variable exportsVar, DataFlow::Node nd) {
|
||||||
exists(NodeModule m |
|
exists(NodeModule m |
|
||||||
exportsVar = m.getScope().getVariable("exports") and
|
exportsVar = m.getScope().getVariable("exports") and
|
||||||
assgn.getLhs() = exportsVar.getAnAccess() and
|
assign.getLhs() = exportsVar.getAnAccess() and
|
||||||
nd = assgn.getRhs().flow()
|
nd = assign.getRhs().flow()
|
||||||
)
|
)
|
||||||
or
|
or
|
||||||
exportsAssign(assgn, exportsVar, nd.getASuccessor())
|
exportsAssign(assign, exportsVar, nd.getASuccessor())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ predicate matchesBeginningOfString(RegExpTerm term) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if the given sequence contains top-level domain preceded by a dot, such as `.com`,
|
* Holds if the given sequence `seq` contains top-level domain preceded by a dot, such as `.com`,
|
||||||
* excluding cases where this is at the very beginning of the regexp.
|
* excluding cases where this is at the very beginning of the regexp.
|
||||||
*
|
*
|
||||||
* `i` is bound to the index of the last child in the top-level domain part.
|
* `i` is bound to the index of the last child in the top-level domain part.
|
||||||
|
|||||||
@@ -88,8 +88,8 @@ DataFlow::Node schemeCheck(DataFlow::Node nd, DangerousScheme scheme) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Gets a data-flow node that checks an instance of `ap` against the given `scheme`. */
|
/** Gets a data-flow node that checks an instance of `ap` against the given `scheme`. */
|
||||||
DataFlow::Node schemeCheckOn(DataFlow::SourceNode root, string path, DangerousScheme scheme) {
|
DataFlow::Node schemeCheckOn(DataFlow::SourceNode root, string ap, DangerousScheme scheme) {
|
||||||
result = schemeCheck(AccessPath::getAReferenceTo(root, path), scheme)
|
result = schemeCheck(AccessPath::getAReferenceTo(root, ap), scheme)
|
||||||
}
|
}
|
||||||
|
|
||||||
from DataFlow::SourceNode root, string path, int n
|
from DataFlow::SourceNode root, string path, int n
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ class LiteralLengthExpr extends DotExpr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if `length` is derived from the length of the given `indexOf`-operand.
|
* Holds if `length` is derived from the length of the given indexOf `operand`.
|
||||||
*/
|
*/
|
||||||
predicate isDerivedFromLength(DataFlow::Node length, DataFlow::Node operand) {
|
predicate isDerivedFromLength(DataFlow::Node length, DataFlow::Node operand) {
|
||||||
exists(IndexOfCall call | operand = call.getAnOperand() |
|
exists(IndexOfCall call | operand = call.getAnOperand() |
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ private predicate variableDefLookup(VarAccess va, AstNode def, string kind) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds if variable access `va` is of kind `kind` and refers to the
|
* Holds if variable access `va` is of kind `kind` and refers to the
|
||||||
* variable declaration.
|
* variable declaration `decl`.
|
||||||
*
|
*
|
||||||
* For example, in the statement `var x = 42, y = x;`, the initializing
|
* For example, in the statement `var x = 42, y = x;`, the initializing
|
||||||
* expression of `y` is a variable access `x` of kind `"V"` that refers to
|
* expression of `y` is a variable access `x` of kind `"V"` that refers to
|
||||||
|
|||||||
4
javascript/ql/src/external/DefectFilter.qll
vendored
4
javascript/ql/src/external/DefectFilter.qll
vendored
@@ -5,8 +5,8 @@ import semmle.javascript.Files
|
|||||||
/**
|
/**
|
||||||
* Holds if `id` in the opaque identifier of a result reported by query `queryPath`,
|
* Holds if `id` in the opaque identifier of a result reported by query `queryPath`,
|
||||||
* such that `message` is the associated message and the location of the result spans
|
* such that `message` is the associated message and the location of the result spans
|
||||||
* column `startcolumn` of line `startline` to column `endcolumn` of line `endline`
|
* column `startcol` of line `startline` to column `endcol` of line `endline`
|
||||||
* in file `filepath`.
|
* in `file`.
|
||||||
*
|
*
|
||||||
* For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
|
* For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
|
||||||
*/
|
*/
|
||||||
|
|||||||
4
javascript/ql/src/external/MetricFilter.qll
vendored
4
javascript/ql/src/external/MetricFilter.qll
vendored
@@ -5,8 +5,8 @@ import javascript
|
|||||||
/**
|
/**
|
||||||
* Holds if `id` in the opaque identifier of a result reported by query `queryPath`,
|
* Holds if `id` in the opaque identifier of a result reported by query `queryPath`,
|
||||||
* such that `value` is the reported metric value and the location of the result spans
|
* such that `value` is the reported metric value and the location of the result spans
|
||||||
* column `startcolumn` of line `startline` to column `endcolumn` of line `endline`
|
* column `startcol` of line `startline` to column `endcol` of line `endline`
|
||||||
* in file `filepath`.
|
* in `file`.
|
||||||
*
|
*
|
||||||
* For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
|
* For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/).
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user