Skip to content

Commit 742d33d

Browse files
committed
Updated getAServer with API graphs.
1 parent 567a46e commit 742d33d

File tree

3 files changed

+58
-12
lines changed

3 files changed

+58
-12
lines changed

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -218,19 +218,19 @@ module ServerWebSocket {
218218
/**
219219
* Gets a server created by a library named `library`.
220220
*/
221-
DataFlow::SourceNode getAServer(LibraryName library) {
221+
API::InvokeNode getAServer(LibraryName library) {
222222
library = ws() and
223-
result = DataFlow::moduleImport("ws").getAConstructorInvocation("Server")
223+
result = API::moduleImport("ws").getMember("Server").getAnInvocation()
224224
or
225225
library = sockjs() and
226-
result = DataFlow::moduleImport("sockjs").getAMemberCall("createServer")
226+
result = API::moduleImport("sockjs").getMember("createServer").getAnInvocation()
227227
}
228228

229229
/**
230230
* Gets a `socket.on("connection", (msg, req) => {})` call.
231231
*/
232232
private DataFlow::CallNode getAConnectionCall(LibraryName library) {
233-
result = getAServer(library).getAMemberCall(EventEmitter::on()) and
233+
result = getAServer(library).getReturn().getMember(EventEmitter::on()).getACall() and
234234
result.getArgument(0).mayHaveStringValue("connection")
235235
}
236236

javascript/ql/test/library-tests/frameworks/WebSocket/server-custom.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@ const { MyWebSocketServer, myWebSocketServerInstance } = require('./server.js');
33
(function () {
44
const wss = new MyWebSocketServer({ port: 8080 });
55

6-
wss.on('connection', function connection(ws) { // $ MISSING: serverSocket
7-
ws.on('message', function incoming(message) { // $ MISSING: remoteFlow
6+
wss.on('connection', function connection(ws) { // $ serverSocket
7+
ws.on('message', function incoming(message) { // $ remoteFlow
88
console.log('received: %s', message);
9-
}); // $ MISSING: serverReceive
9+
}); // $ serverReceive
1010

11-
ws.send('Hi from server!'); // $ MISSING: serverSend
11+
ws.send('Hi from server!'); // $ serverSend
1212
});
1313
})();
1414

1515
(function () {
16-
myWebSocketServerInstance.on('connection', function connection(ws) { // $ MISSING: serverSocket
17-
ws.on('message', function incoming(message) { // $ MISSING: remoteFlow
16+
myWebSocketServerInstance.on('connection', function connection(ws) { // $ serverSocket
17+
ws.on('message', function incoming(message) { // $ remoteFlow
1818
console.log('received: %s', message);
19-
}); // $ MISSING: serverReceive
19+
}); // $ serverReceive
2020

21-
ws.send('Hi from server!'); // $ MISSING: serverSend
21+
ws.send('Hi from server!'); // $ serverSend
2222
});
2323
})();

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

+46
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,55 @@ flowSteps
4040
| browser-custom.js:1:23:1:30 | MySockJS | browser-custom.js:1:23:1:30 | MySockJS |
4141
| browser-custom.js:1:33:1:51 | myWebSocketInstance | browser-custom.js:1:33:1:51 | myWebSocketInstance |
4242
| browser-custom.js:1:54:1:69 | mySockJSInstance | browser-custom.js:1:54:1:69 | mySockJSInstance |
43+
| browser-custom.js:7:15:7:32 | 'Hi from browser!' | server-custom.js:7:38:7:44 | message |
44+
| browser-custom.js:7:15:7:32 | 'Hi from browser!' | server-custom.js:17:38:17:44 | message |
4345
| browser-custom.js:7:15:7:32 | 'Hi from browser!' | server.js:7:38:7:44 | message |
4446
| browser-custom.js:23:13:23:18 | 'test' | sockjs.js:9:31:9:37 | message |
47+
| browser-custom.js:39:34:39:51 | 'Hi from browser!' | server-custom.js:7:38:7:44 | message |
48+
| browser-custom.js:39:34:39:51 | 'Hi from browser!' | server-custom.js:17:38:17:44 | message |
4549
| browser-custom.js:39:34:39:51 | 'Hi from browser!' | server.js:7:38:7:44 | message |
4650
| browser-custom.js:54:31:54:36 | 'test' | sockjs.js:9:31:9:37 | message |
51+
| browser.js:5:15:5:32 | 'Hi from browser!' | server-custom.js:7:38:7:44 | message |
52+
| browser.js:5:15:5:32 | 'Hi from browser!' | server-custom.js:17:38:17:44 | message |
4753
| browser.js:5:15:5:32 | 'Hi from browser!' | server.js:7:38:7:44 | message |
4854
| browser.js:21:13:21:18 | 'test' | sockjs.js:9:31:9:37 | message |
55+
| client-custom.js:7:11:7:27 | 'Hi from client!' | server-custom.js:7:38:7:44 | message |
56+
| client-custom.js:7:11:7:27 | 'Hi from client!' | server-custom.js:17:38:17:44 | message |
4957
| client-custom.js:7:11:7:27 | 'Hi from client!' | server.js:7:38:7:44 | message |
58+
| client-custom.js:17:30:17:46 | 'Hi from client!' | server-custom.js:7:38:7:44 | message |
59+
| client-custom.js:17:30:17:46 | 'Hi from client!' | server-custom.js:17:38:17:44 | message |
5060
| client-custom.js:17:30:17:46 | 'Hi from client!' | server.js:7:38:7:44 | message |
61+
| client.js:7:11:7:27 | 'Hi from client!' | server-custom.js:7:38:7:44 | message |
62+
| client.js:7:11:7:27 | 'Hi from client!' | server-custom.js:17:38:17:44 | message |
5163
| client.js:7:11:7:27 | 'Hi from client!' | server.js:7:38:7:44 | message |
5264
| client.js:15:32:15:44 | require('ws') | client-custom.js:1:9:1:21 | MyWebSocketWS |
5365
| client.js:16:40:16:72 | new Web ... e.org') | client-custom.js:1:24:1:44 | myWebSo ... nstance |
66+
| server-custom.js:11:11:11:27 | 'Hi from server!' | browser-custom.js:11:39:11:48 | event.data |
67+
| server-custom.js:11:11:11:27 | 'Hi from server!' | browser-custom.js:15:40:15:49 | event.data |
68+
| server-custom.js:11:11:11:27 | 'Hi from server!' | browser-custom.js:27:26:27:31 | e.data |
69+
| server-custom.js:11:11:11:27 | 'Hi from server!' | browser-custom.js:43:45:43:54 | event.data |
70+
| server-custom.js:11:11:11:27 | 'Hi from server!' | browser-custom.js:47:46:47:55 | event.data |
71+
| server-custom.js:11:11:11:27 | 'Hi from server!' | browser-custom.js:58:32:58:37 | e.data |
72+
| server-custom.js:11:11:11:27 | 'Hi from server!' | browser-custom.js:69:38:69:43 | e.data |
73+
| server-custom.js:11:11:11:27 | 'Hi from server!' | browser.js:9:39:9:48 | event.data |
74+
| server-custom.js:11:11:11:27 | 'Hi from server!' | browser.js:13:40:13:49 | event.data |
75+
| server-custom.js:11:11:11:27 | 'Hi from server!' | browser.js:25:26:25:31 | e.data |
76+
| server-custom.js:11:11:11:27 | 'Hi from server!' | client-custom.js:10:37:10:40 | data |
77+
| server-custom.js:11:11:11:27 | 'Hi from server!' | client-custom.js:20:56:20:59 | data |
78+
| server-custom.js:11:11:11:27 | 'Hi from server!' | client.js:10:37:10:40 | data |
79+
| server-custom.js:21:11:21:27 | 'Hi from server!' | browser-custom.js:11:39:11:48 | event.data |
80+
| server-custom.js:21:11:21:27 | 'Hi from server!' | browser-custom.js:15:40:15:49 | event.data |
81+
| server-custom.js:21:11:21:27 | 'Hi from server!' | browser-custom.js:27:26:27:31 | e.data |
82+
| server-custom.js:21:11:21:27 | 'Hi from server!' | browser-custom.js:43:45:43:54 | event.data |
83+
| server-custom.js:21:11:21:27 | 'Hi from server!' | browser-custom.js:47:46:47:55 | event.data |
84+
| server-custom.js:21:11:21:27 | 'Hi from server!' | browser-custom.js:58:32:58:37 | e.data |
85+
| server-custom.js:21:11:21:27 | 'Hi from server!' | browser-custom.js:69:38:69:43 | e.data |
86+
| server-custom.js:21:11:21:27 | 'Hi from server!' | browser.js:9:39:9:48 | event.data |
87+
| server-custom.js:21:11:21:27 | 'Hi from server!' | browser.js:13:40:13:49 | event.data |
88+
| server-custom.js:21:11:21:27 | 'Hi from server!' | browser.js:25:26:25:31 | e.data |
89+
| server-custom.js:21:11:21:27 | 'Hi from server!' | client-custom.js:10:37:10:40 | data |
90+
| server-custom.js:21:11:21:27 | 'Hi from server!' | client-custom.js:20:56:20:59 | data |
91+
| server-custom.js:21:11:21:27 | 'Hi from server!' | client.js:10:37:10:40 | data |
5492
| server.js:11:11:11:27 | 'Hi from server!' | browser-custom.js:11:39:11:48 | event.data |
5593
| server.js:11:11:11:27 | 'Hi from server!' | browser-custom.js:15:40:15:49 | event.data |
5694
| server.js:11:11:11:27 | 'Hi from server!' | browser-custom.js:27:26:27:31 | e.data |
@@ -77,14 +115,22 @@ flowSteps
77115
| sockjs.js:11:20:11:50 | JSON.st ... .test)) | browser.js:25:26:25:31 | e.data |
78116
| sockjs.js:11:20:11:50 | JSON.st ... .test)) | browser.js:30:42:30:51 | event.data |
79117
remoteFlow
118+
| server-custom.js:7:38:7:44 | message |
119+
| server-custom.js:17:38:17:44 | message |
80120
| server.js:7:38:7:44 | message |
81121
| sockjs.js:9:31:9:37 | message |
82122
serverReceive
123+
| server-custom.js:7:3:9:4 | ws.on(' ... );\\n\\t\\t}) |
124+
| server-custom.js:17:3:19:4 | ws.on(' ... );\\n\\t\\t}) |
83125
| server.js:7:3:9:4 | ws.on(' ... );\\n\\t\\t}) |
84126
| sockjs.js:9:5:12:6 | conn.on ... \\n }) |
85127
serverSend
128+
| server-custom.js:11:3:11:28 | ws.send ... rver!') |
129+
| server-custom.js:21:3:21:28 | ws.send ... rver!') |
86130
| server.js:11:3:11:28 | ws.send ... rver!') |
87131
| sockjs.js:11:9:11:51 | conn.wr ... test))) |
88132
serverSocket
133+
| server-custom.js:6:43:6:44 | ws |
134+
| server-custom.js:16:65:16:66 | ws |
89135
| server.js:6:43:6:44 | ws |
90136
| sockjs.js:8:40:8:43 | conn |

0 commit comments

Comments
 (0)