Skip to content

Commit d5097d8

Browse files
committed
support direct callbacks to require("net").createServer
1 parent 22b3b0a commit d5097d8

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,8 +1068,10 @@ module NodeJSLib {
10681068
/**
10691069
* An instance of net.createServer(), which creates a new TCP/IPC server.
10701070
*/
1071-
private class NodeJSNetServer extends DataFlow::SourceNode {
1072-
NodeJSNetServer() { this = DataFlow::moduleMember("net", "createServer").getAnInvocation() }
1071+
class NodeJSNetServer extends DataFlow::InvokeNode {
1072+
NodeJSNetServer() {
1073+
this = DataFlow::moduleMember(["net", "tls"], "createServer").getAnInvocation()
1074+
}
10731075

10741076
private DataFlow::SourceNode ref(DataFlow::TypeTracker t) {
10751077
t.start() and result = this
@@ -1096,6 +1098,8 @@ module NodeJSLib {
10961098
|
10971099
this = call.getCallback(1).getParameter(0)
10981100
)
1101+
or
1102+
this = server.getCallback([0, 1]).getParameter(0)
10991103
}
11001104

11011105
DataFlow::SourceNode ref() { result = EventEmitter::trackEventEmitter(this) }

javascript/ql/test/library-tests/frameworks/NodeJSLib/createServer.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,14 @@ var https = require('https');
22
https.createServer(function (req, res) {});
33
https.createServer(o, function (req, res) {});
44
require('http2').createServer((req, res) => {});
5+
6+
require("tls").createServer((socket) => {
7+
socket.on("data", (data) => {})
8+
});
9+
10+
const net = require('net');
11+
const tls = require('tls');
12+
13+
const server = (isSecure ? tls : net).createServer(options, (socket) => {
14+
socket.on("data", (data) => {})
15+
});

javascript/ql/test/library-tests/frameworks/NodeJSLib/tests.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ test_ClientRequest_getADataNode
163163
| src/http.js:27:16:27:73 | http.re ... POST'}) | src/http.js:50:16:50:22 | 'stuff' |
164164
| src/http.js:27:16:27:73 | http.re ... POST'}) | src/http.js:51:14:51:25 | 'more stuff' |
165165
test_RemoteFlowSources
166+
| createServer.js:7:24:7:27 | data |
167+
| createServer.js:14:24:14:27 | data |
166168
| src/http.js:6:26:6:32 | req.url |
167169
| src/http.js:8:3:8:20 | req.headers.cookie |
168170
| src/http.js:9:3:9:17 | req.headers.foo |

0 commit comments

Comments
 (0)