Skip to content

Commit 639f043

Browse files
committed
JS: Avoid bad join ordering in ClosureModule
1 parent e52e1b2 commit 639f043

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

javascript/ql/src/semmle/javascript/Closure.qll

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,17 +115,28 @@ module Closure {
115115
override DefaultClosureModuleDeclaration range;
116116
}
117117

118+
private GlobalVariable googVariable() {
119+
variables(result, "goog", any(GlobalScope sc))
120+
}
121+
122+
pragma[nomagic]
123+
private MethodCallExpr googModuleDeclExpr() {
124+
result.getReceiver() = googVariable().getAnAccess() and
125+
result.getMethodName() = ["module", "declareModuleId"]
126+
}
127+
128+
pragma[nomagic]
129+
private MethodCallExpr googModuleDeclExprInContainer(StmtContainer container) {
130+
result.getReceiver() = googModuleDeclExpr() and
131+
container = result.getContainer()
132+
}
133+
118134
/**
119135
* A module using the Closure module system, declared using `goog.module()` or `goog.declareModuleId()`.
120136
*/
121137
class ClosureModule extends Module {
122138
ClosureModule() {
123-
// Use AST-based predicate to cut recursive dependencies.
124-
exists(MethodCallExpr call |
125-
getAStmt().(ExprStmt).getExpr() = call and
126-
call.getReceiver().(GlobalVarAccess).getName() = "goog" and
127-
(call.getMethodName() = "module" or call.getMethodName() = "declareModuleId")
128-
)
139+
exists(googModuleDeclExprInContainer(this))
129140
}
130141

131142
/**

0 commit comments

Comments
 (0)