Skip to content

Commit b9ac1e5

Browse files
committed
JS: Deprecate a bunch of stuff from Closure
1 parent c07cc6e commit b9ac1e5

File tree

2 files changed

+25
-18
lines changed

2 files changed

+25
-18
lines changed

javascript/ql/lib/semmle/javascript/Closure.qll

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ module Closure {
3232
/**
3333
* A reference to a Closure namespace.
3434
*/
35-
class ClosureNamespaceRef extends DataFlow::Node instanceof ClosureNamespaceRef::Range {
35+
deprecated class ClosureNamespaceRef extends DataFlow::Node instanceof ClosureNamespaceRef::Range {
3636
/**
3737
* Gets the namespace being referenced.
3838
*/
3939
string getClosureNamespace() { result = super.getClosureNamespace() }
4040
}
4141

42-
module ClosureNamespaceRef {
42+
deprecated module ClosureNamespaceRef {
4343
/**
4444
* A reference to a Closure namespace.
4545
*
@@ -56,10 +56,10 @@ module Closure {
5656
/**
5757
* A data flow node that returns the value of a closure namespace.
5858
*/
59-
class ClosureNamespaceAccess extends ClosureNamespaceRef instanceof ClosureNamespaceAccess::Range {
60-
}
59+
deprecated class ClosureNamespaceAccess extends ClosureNamespaceRef instanceof ClosureNamespaceAccess::Range
60+
{ }
6161

62-
module ClosureNamespaceAccess {
62+
deprecated module ClosureNamespaceAccess {
6363
/**
6464
* A data flow node that returns the value of a closure namespace.
6565
*
@@ -71,7 +71,7 @@ module Closure {
7171
/**
7272
* A call to a method on the `goog.` namespace, as a closure reference.
7373
*/
74-
abstract private class DefaultNamespaceRef extends DataFlow::MethodCallNode,
74+
abstract deprecated private class DefaultNamespaceRef extends DataFlow::MethodCallNode,
7575
ClosureNamespaceRef::Range
7676
{
7777
DefaultNamespaceRef() { this = DataFlow::globalVarRef("goog").getAMethodCall() }
@@ -83,14 +83,14 @@ module Closure {
8383
* Holds if `node` is the data flow node corresponding to the expression in
8484
* a top-level expression statement.
8585
*/
86-
private predicate isTopLevelExpr(DataFlow::Node node) {
86+
deprecated private predicate isTopLevelExpr(DataFlow::Node node) {
8787
any(TopLevel tl).getAChildStmt().(ExprStmt).getExpr().flow() = node
8888
}
8989

9090
/**
9191
* A top-level call to `goog.provide`.
9292
*/
93-
private class DefaultClosureProvideCall extends DefaultNamespaceRef {
93+
deprecated private class DefaultClosureProvideCall extends DefaultNamespaceRef {
9494
DefaultClosureProvideCall() {
9595
this.getMethodName() = "provide" and
9696
isTopLevelExpr(this)
@@ -100,27 +100,28 @@ module Closure {
100100
/**
101101
* A top-level call to `goog.provide`.
102102
*/
103-
class ClosureProvideCall extends ClosureNamespaceRef, DataFlow::MethodCallNode instanceof DefaultClosureProvideCall
103+
deprecated class ClosureProvideCall extends ClosureNamespaceRef, DataFlow::MethodCallNode instanceof DefaultClosureProvideCall
104104
{ }
105105

106106
/**
107107
* A call to `goog.require`.
108108
*/
109-
private class DefaultClosureRequireCall extends DefaultNamespaceRef, ClosureNamespaceAccess::Range
109+
deprecated private class DefaultClosureRequireCall extends DefaultNamespaceRef,
110+
ClosureNamespaceAccess::Range
110111
{
111112
DefaultClosureRequireCall() { this.getMethodName() = "require" }
112113
}
113114

114115
/**
115116
* A call to `goog.require`.
116117
*/
117-
class ClosureRequireCall extends ClosureNamespaceAccess, DataFlow::MethodCallNode instanceof DefaultClosureRequireCall
118+
deprecated class ClosureRequireCall extends ClosureNamespaceAccess, DataFlow::MethodCallNode instanceof DefaultClosureRequireCall
118119
{ }
119120

120121
/**
121122
* A top-level call to `goog.module` or `goog.declareModuleId`.
122123
*/
123-
private class DefaultClosureModuleDeclaration extends DefaultNamespaceRef {
124+
deprecated private class DefaultClosureModuleDeclaration extends DefaultNamespaceRef {
124125
DefaultClosureModuleDeclaration() {
125126
(this.getMethodName() = "module" or this.getMethodName() = "declareModuleId") and
126127
isTopLevelExpr(this)
@@ -130,7 +131,7 @@ module Closure {
130131
/**
131132
* A top-level call to `goog.module` or `goog.declareModuleId`.
132133
*/
133-
class ClosureModuleDeclaration extends ClosureNamespaceRef, DataFlow::MethodCallNode instanceof DefaultClosureModuleDeclaration
134+
deprecated class ClosureModuleDeclaration extends ClosureNamespaceRef, DataFlow::MethodCallNode instanceof DefaultClosureModuleDeclaration
134135
{ }
135136

136137
pragma[noinline]
@@ -193,7 +194,7 @@ module Closure {
193194
* A global Closure script, that is, a toplevel that is executed in the global scope and
194195
* contains a toplevel call to `goog.provide` or `goog.require`.
195196
*/
196-
class ClosureScript extends TopLevel {
197+
deprecated class ClosureScript extends TopLevel {
197198
ClosureScript() {
198199
not this instanceof ClosureModule and
199200
(
@@ -225,7 +226,13 @@ module Closure {
225226
*/
226227
pragma[noinline]
227228
predicate isClosureNamespace(string name) {
228-
exists(string namespace | namespace = any(ClosureNamespaceRef ref).getClosureNamespace() |
229+
exists(string namespace |
230+
namespace =
231+
[
232+
any(RequireCallExpr ref).getClosureNamespace(),
233+
any(ModuleDeclarationCall c).getClosureNamespace()
234+
]
235+
|
229236
name = namespace.substring(0, namespace.indexOf("."))
230237
or
231238
name = namespace

javascript/ql/lib/semmle/javascript/GlobalAccessPaths.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ module AccessPath {
3434
not this.accessesGlobal(_) and
3535
not this instanceof DataFlow::PropRead and
3636
not this instanceof PropertyProjection and
37-
not this instanceof Closure::ClosureNamespaceAccess and
37+
not this.asExpr() instanceof Closure::RequireCallExpr and
3838
not this = DataFlow::parameterNode(any(ImmediatelyInvokedFunctionExpr iife).getAParameter()) and
3939
not FlowSteps::identityFunctionStep(_, this)
4040
}
@@ -139,8 +139,8 @@ module AccessPath {
139139
result = join(fromReference(prop.getBase(), root), "[number]")
140140
)
141141
or
142-
exists(Closure::ClosureNamespaceAccess acc | node = acc |
143-
result = acc.getClosureNamespace() and
142+
exists(Closure::RequireCallExpr req | node = req.flow() |
143+
result = req.getClosureNamespace() and
144144
root.isGlobal()
145145
)
146146
or

0 commit comments

Comments
 (0)