Skip to content

Commit d98028b

Browse files
committed
change ServerDefinition to a DataFlow::Node
1 parent ced4843 commit d98028b

File tree

9 files changed

+37
-31
lines changed

9 files changed

+37
-31
lines changed

javascript/ql/lib/semmle/javascript/frameworks/Connect.qll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ module Connect {
1010
/**
1111
* An expression that creates a new Connect server.
1212
*/
13-
class ServerDefinition extends HTTP::Servers::StandardServerDefinition, CallExpr {
13+
class ServerDefinition extends HTTP::Servers::StandardServerDefinition, DataFlow::CallNode {
1414
ServerDefinition() {
1515
// `app = connect()`
16-
this = DataFlow::moduleImport("connect").getAnInvocation().asExpr()
16+
this = DataFlow::moduleImport("connect").getAnInvocation()
1717
}
1818
}
1919

@@ -69,7 +69,7 @@ module Connect {
6969
server.ref().flowsToExpr(getReceiver())
7070
or
7171
// app.use(...).use(fun)
72-
this.getReceiver().(RouteSetup).getServer() = server
72+
this.getReceiver().(RouteSetup).getServer() = server.asExpr()
7373
)
7474
}
7575

@@ -84,7 +84,7 @@ module Connect {
8484
exists(DataFlow::TypeBackTracker t2 | result = getARouteHandler(t2).backtrack(t2, t))
8585
}
8686

87-
override Expr getServer() { result = server }
87+
override Expr getServer() { result = server.asExpr() }
8888

8989
/** Gets an argument that represents a route handler being registered. */
9090
Expr getARouteHandlerExpr() { result = getAnArgument() }

javascript/ql/lib/semmle/javascript/frameworks/Express.qll

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,10 @@ module Express {
199199
)
200200
}
201201

202-
override Expr getServer() { result.(Application).getARouteHandler() = this.getARouteHandler() }
202+
override Expr getServer() {
203+
any(DataFlow::Node n | n.asExpr() = result).(Application).getARouteHandler() =
204+
this.getARouteHandler()
205+
}
203206

204207
/**
205208
* Gets the HTTP request type this is registered for, if any.
@@ -823,20 +826,21 @@ module Express {
823826
* An Express server application.
824827
*/
825828
private class Application extends HTTP::ServerDefinition {
826-
Application() { this = appCreation().asExpr() }
829+
Application() { this = appCreation() }
827830

828831
/**
829832
* Gets a route handler of the application, regardless of nesting.
830833
*/
831834
override HTTP::RouteHandler getARouteHandler() {
832-
result = this.(RouterDefinition).getASubRouter*().getARouteHandler()
835+
result = this.asExpr().(RouterDefinition).getASubRouter*().getARouteHandler()
833836
}
834837
}
835838

836839
/**
837840
* An Express router.
838841
*/
839842
class RouterDefinition extends InvokeExpr {
843+
// TODO: DataFlow::Node
840844
RouterDefinition() { this = routerCreation().asExpr() }
841845

842846
private DataFlow::SourceNode ref(DataFlow::TypeTracker t) {

javascript/ql/lib/semmle/javascript/frameworks/Fastify.qll

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ module Fastify {
1818
* A standard way to create a Fastify server.
1919
*/
2020
class StandardServerDefinition extends ServerDefinition {
21-
StandardServerDefinition() {
22-
this = DataFlow::moduleImport("fastify").getAnInvocation().asExpr()
23-
}
21+
StandardServerDefinition() { this = DataFlow::moduleImport("fastify").getAnInvocation() }
2422
}
2523

2624
/** Gets a data flow node referring to a fastify server. */
@@ -139,7 +137,7 @@ module Fastify {
139137
string methodName;
140138

141139
RouteSetup() {
142-
this = server(server.flow()).getAMethodCall(methodName).asExpr() and
140+
this = server(server).getAMethodCall(methodName).asExpr() and
143141
methodName = ["route", "get", "head", "post", "put", "delete", "options", "patch"]
144142
}
145143

@@ -154,7 +152,7 @@ module Fastify {
154152
exists(DataFlow::TypeBackTracker t2 | result = this.getARouteHandler(t2).backtrack(t2, t))
155153
}
156154

157-
override Expr getServer() { result = server }
155+
override Expr getServer() { result = server.asExpr() }
158156

159157
/** Gets an argument that represents a route handler being registered. */
160158
DataFlow::Node getARouteHandlerExpr() {

javascript/ql/lib/semmle/javascript/frameworks/HTTP.qll

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ module HTTP {
174174
/**
175175
* An expression that creates a new server.
176176
*/
177-
abstract class ServerDefinition extends Expr {
177+
abstract class ServerDefinition extends DataFlow::Node {
178178
/**
179179
* Gets a route handler of the server.
180180
*/
@@ -242,7 +242,7 @@ module HTTP {
242242
/**
243243
* An expression that sets up a route on a server.
244244
*/
245-
abstract class RouteSetup extends Expr { }
245+
abstract class RouteSetup extends Expr { } // TODO: DataFlow::Node
246246

247247
/**
248248
* An expression that may contain a request object.
@@ -275,11 +275,13 @@ module HTTP {
275275
* A standard server definition.
276276
*/
277277
abstract class StandardServerDefinition extends ServerDefinition {
278-
override RouteHandler getARouteHandler() { result.(StandardRouteHandler).getServer() = this }
278+
override RouteHandler getARouteHandler() {
279+
result.(StandardRouteHandler).getServer() = this.asExpr()
280+
}
279281

280282
private DataFlow::SourceNode ref(DataFlow::TypeTracker t) {
281283
t.start() and
282-
result = DataFlow::exprNode(this)
284+
result = this.getALocalSource()
283285
or
284286
exists(DataFlow::TypeTracker t2 | result = this.ref(t2).track(t2, t))
285287
}
@@ -307,6 +309,7 @@ module HTTP {
307309
* Gets the server this route handler is registered on.
308310
*/
309311
Expr getServer() {
312+
// TODO: DataFlow::Node
310313
exists(StandardRouteSetup setup | setup.getARouteHandler() = this |
311314
result = setup.getServer()
312315
)
@@ -411,7 +414,7 @@ module HTTP {
411414
/**
412415
* Gets the server on which this route setup sets up routes.
413416
*/
414-
abstract Expr getServer();
417+
abstract Expr getServer(); // TODO: DataFlow::Node
415418
}
416419

417420
/**

javascript/ql/lib/semmle/javascript/frameworks/Hapi.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ module Hapi {
99
/**
1010
* An expression that creates a new Hapi server.
1111
*/
12-
class ServerDefinition extends HTTP::Servers::StandardServerDefinition, NewExpr {
12+
class ServerDefinition extends HTTP::Servers::StandardServerDefinition, DataFlow::NewNode {
1313
ServerDefinition() {
1414
// `server = new Hapi.Server()`
15-
this = DataFlow::moduleMember("hapi", "Server").getAnInstantiation().asExpr()
15+
this = DataFlow::moduleMember("hapi", "Server").getAnInstantiation()
1616
}
1717
}
1818

@@ -219,7 +219,7 @@ module Hapi {
219219

220220
Expr getRouteHandlerExpr() { result = handler }
221221

222-
override Expr getServer() { result = server }
222+
override Expr getServer() { result = server.asExpr() }
223223
}
224224

225225
/**

javascript/ql/lib/semmle/javascript/frameworks/Koa.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ module Koa {
99
/**
1010
* An expression that creates a new Koa application.
1111
*/
12-
class AppDefinition extends HTTP::Servers::StandardServerDefinition, InvokeExpr {
12+
class AppDefinition extends HTTP::Servers::StandardServerDefinition, DataFlow::InvokeNode {
1313
AppDefinition() {
1414
// `app = new Koa()` / `app = Koa()`
15-
this = DataFlow::moduleImport("koa").getAnInvocation().asExpr()
15+
this = DataFlow::moduleImport("koa").getAnInvocation()
1616
}
1717
}
1818

@@ -401,7 +401,7 @@ module Koa {
401401
result.(RouteHandler).getARouteHandlerRegistrationObject().flowsToExpr(this.getArgument(0))
402402
}
403403

404-
override Expr getServer() { result = server }
404+
override Expr getServer() { result = server.asExpr() }
405405
}
406406

407407
/**

javascript/ql/lib/semmle/javascript/frameworks/LiveServer.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ private module LiveServer {
1010
* An expression that imports the live-server package, seen as a server-definition.
1111
*/
1212
class ServerDefinition extends HTTP::Servers::StandardServerDefinition {
13-
ServerDefinition() { this = DataFlow::moduleImport("live-server").asExpr() }
13+
ServerDefinition() { this = DataFlow::moduleImport("live-server") }
1414

15-
API::Node getImportNode() { result.asSource().asExpr() = this }
15+
API::Node getImportNode() { result.asSource() = this }
1616
}
1717

1818
/**
@@ -49,6 +49,6 @@ private module LiveServer {
4949
)
5050
}
5151

52-
override Expr getServer() { result = server }
52+
override Expr getServer() { result = server.asExpr() }
5353
}
5454
}

javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ module NodeJSLib {
5050
* Holds if `call` is an invocation of `http.createServer` or `https.createServer`.
5151
*/
5252
predicate isCreateServer(CallExpr call) {
53+
// TODO: DataFlow::Node
5354
exists(string pkg, string fn |
5455
pkg = "http" and fn = "createServer"
5556
or
@@ -248,7 +249,7 @@ module NodeJSLib {
248249
)
249250
}
250251

251-
override Expr getServer() { result = server }
252+
override Expr getServer() { result = server.asExpr() }
252253

253254
/**
254255
* Gets the expression for the handler registered by this setup.
@@ -378,7 +379,7 @@ module NodeJSLib {
378379
* An expression that creates a new Node.js server.
379380
*/
380381
class ServerDefinition extends HTTP::Servers::StandardServerDefinition {
381-
ServerDefinition() { isCreateServer(this) }
382+
ServerDefinition() { isCreateServer(this.asExpr()) }
382383
}
383384

384385
/** An expression that is passed as `http.request({ auth: <expr> }, ...)`. */

javascript/ql/lib/semmle/javascript/frameworks/Restify.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ module Restify {
99
/**
1010
* An expression that creates a new Restify server.
1111
*/
12-
class ServerDefinition extends HTTP::Servers::StandardServerDefinition, CallExpr {
12+
class ServerDefinition extends HTTP::Servers::StandardServerDefinition, DataFlow::CallNode {
1313
ServerDefinition() {
1414
// `server = restify.createServer()`
15-
this = DataFlow::moduleMember("restify", "createServer").getACall().asExpr()
15+
this = DataFlow::moduleMember("restify", "createServer").getACall()
1616
}
1717
}
1818

@@ -154,6 +154,6 @@ module Restify {
154154

155155
override DataFlow::SourceNode getARouteHandler() { result.flowsToExpr(getArgument(1)) }
156156

157-
override Expr getServer() { result = server }
157+
override Expr getServer() { result = server.asExpr() }
158158
}
159159
}

0 commit comments

Comments
 (0)