Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 59b7b07

Browse files
author
Esben Sparre Andreasen
committed
JS: make Express' res/req extend Node's res/req
1 parent a25acd0 commit 59b7b07

6 files changed

Lines changed: 53 additions & 20 deletions

File tree

change-notes/1.22/analysis-javascript.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
- [exec](https://www.npmjs.com/package/exec)
99
- [execa](https://www.npmjs.com/package/execa)
1010
- [exec-async](https://www.npmjs.com/package/exec-async)
11+
- [express](https://www.npmjs.com/package/express)
1112
- [remote-exec](https://www.npmjs.com/package/remote-exec)
1213

1314
## New queries

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

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -380,14 +380,14 @@ module Express {
380380
/**
381381
* An Express response expression.
382382
*/
383-
class ResponseExpr extends HTTP::Servers::StandardResponseExpr {
383+
class ResponseExpr extends NodeJSLib::ResponseExpr {
384384
override ResponseSource src;
385385
}
386386

387387
/**
388388
* An Express request expression.
389389
*/
390-
class RequestExpr extends HTTP::Servers::StandardRequestExpr {
390+
class RequestExpr extends NodeJSLib::RequestExpr {
391391
override RequestSource src;
392392
}
393393

@@ -415,14 +415,9 @@ module Express {
415415
)
416416
)
417417
or
418-
exists(string propName |
419-
// `req.url` or `req.originalUrl`
420-
kind = "url" and
421-
this.(DataFlow::PropRef).accesses(request, propName)
422-
|
423-
propName = "url" or
424-
propName = "originalUrl"
425-
)
418+
// `req.originalUrl`
419+
kind = "url" and
420+
this.(DataFlow::PropRef).accesses(request, "originalUrl")
426421
or
427422
// `req.cookies`
428423
kind = "cookie" and
@@ -431,11 +426,6 @@ module Express {
431426
or
432427
kind = "body" and
433428
this.asExpr() = rh.getARequestBodyAccess()
434-
or
435-
exists(RequestHeaderAccess access | this = access |
436-
rh = access.getRouteHandler() and
437-
kind = "header"
438-
)
439429
}
440430

441431
override RouteHandler getRouteHandler() { result = rh }
@@ -626,9 +616,8 @@ module Express {
626616
RouteHandler rh;
627617

628618
ResponseSendArgument() {
629-
exists(MethodCallExpr mce, string name |
630-
mce.calls(rh.getAResponseExpr(), name) and
631-
(name = "send" or name = "end") and
619+
exists(MethodCallExpr mce |
620+
mce.calls(rh.getAResponseExpr(), "send") and
632621
this = mce.getArgument(0)
633622
)
634623
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ module NodeJSLib {
146146
)
147147
}
148148

149-
override RouteHandler getRouteHandler() { result = request.getRouteHandler() }
149+
override HTTP::RouteHandler getRouteHandler() { result = request.getRouteHandler() }
150150

151151
override string getKind() { result = kind }
152152
}
@@ -170,7 +170,7 @@ module NodeJSLib {
170170
result = this.(DataFlow::PropRead).getPropertyName().toLowerCase()
171171
}
172172

173-
override RouteHandler getRouteHandler() { result = request.getRouteHandler() }
173+
override HTTP::RouteHandler getRouteHandler() { result = request.getRouteHandler() }
174174

175175
override string getKind() { result = "header" }
176176

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
var express = require('express');
2+
var app = express();
3+
4+
app.post('/', function(req, res) {
5+
res.end();
6+
res.setHeader();
7+
req.url;
8+
});

0 commit comments

Comments
 (0)