Skip to content

Commit 56405f4

Browse files
committed
change join order for summarizedHigherOrderCall
1 parent b3aa358 commit 56405f4

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

javascript/ql/src/semmle/javascript/dataflow/Configuration.qll

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,12 +1296,9 @@ private predicate summarizedHigherOrderCall(
12961296
Function f, DataFlow::InvokeNode outer, DataFlow::InvokeNode inner, int j,
12971297
DataFlow::Node innerArg, DataFlow::SourceNode cbParm, PathSummary oldSummary
12981298
|
1299-
reachableFromInput(f, outer, arg, innerArg, cfg, oldSummary) and
1300-
// Only track actual parameter flow.
13011299
// Captured flow does not need to be summarized - it is handled by the local case in `higherOrderCall`.
13021300
not arg = DataFlow::capturedVariableNode(_) and
1303-
argumentPassing(outer, cb, f, cbParm) and
1304-
innerArg = inner.getArgument(j)
1301+
summarizedHigherOrderCallAux(f, outer, arg, innerArg, cfg, oldSummary, cbParm, inner, j, cb)
13051302
|
13061303
// direct higher-order call
13071304
cbParm.flowsTo(inner.getCalleeNode()) and
@@ -1317,6 +1314,21 @@ private predicate summarizedHigherOrderCall(
13171314
)
13181315
}
13191316

1317+
/**
1318+
* @see `summarizedHigherOrderCall`.
1319+
*/
1320+
pragma[noinline]
1321+
private predicate summarizedHigherOrderCallAux(
1322+
Function f, DataFlow::InvokeNode outer, DataFlow::Node arg, DataFlow::Node innerArg,
1323+
DataFlow::Configuration cfg, PathSummary oldSummary, DataFlow::SourceNode cbParm,
1324+
DataFlow::InvokeNode inner, int j, DataFlow::Node cb
1325+
) {
1326+
reachableFromInput(f, outer, arg, innerArg, cfg, oldSummary) and
1327+
// Only track actual parameter flow.
1328+
argumentPassing(outer, cb, f, cbParm) and
1329+
innerArg = inner.getArgument(j)
1330+
}
1331+
13201332
/**
13211333
* Holds if `arg` is passed as the `i`th argument to `callback` through a callback invocation.
13221334
*

0 commit comments

Comments
 (0)