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

Skip to content

Commit 36c9af9

Browse files
author
Max Schaefer
committed
JavaScript: Connect up client and server sockets.
1 parent dc614eb commit 36c9af9

20 files changed

Lines changed: 123 additions & 11 deletions

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,12 @@ module SocketIO {
197197
result = getCallback(1).getLastParameter() and
198198
exists(result.getAnInvocation())
199199
}
200+
201+
/** Gets a client-side node that may be sending the data received here. */
202+
SocketIOClient::SendNode getASender() {
203+
result.getSocket().getATargetNamespace() = getSocket().getNamespace() and
204+
not result.getEventName() != getEventName()
205+
}
200206
}
201207

202208
/**
@@ -273,6 +279,12 @@ module SocketIO {
273279
exists(getSocket()) and
274280
result = getLastArgument().getALocalSource()
275281
}
282+
283+
/** Gets a client-side node that may be receiving the data sent here. */
284+
SocketIOClient::ReceiveNode getAReceiver() {
285+
result.getSocket().getATargetNamespace() = getNamespace() and
286+
not result.getEventName() != getEventName()
287+
}
276288
}
277289

278290
/** A socket.io server, identified by its creation site. */
@@ -300,6 +312,9 @@ module SocketIO {
300312
/** Gets the default namespace of this server. */
301313
NamespaceObject getDefaultNamespace() { result = MkNamespace(this, "/") }
302314

315+
/** Gets the namespace with the given path of this server. */
316+
NamespaceObject getNamespace(string path) { result = MkNamespace(this, path) }
317+
303318
/**
304319
* Holds if this server is created at the specified location.
305320
* The location spans column `startcolumn` of line `startline` to
@@ -375,6 +390,23 @@ module SocketIOClient {
375390
not exists(invk.getArgument(0)) and
376391
result = "/"
377392
}
393+
394+
/** Gets a server this socket may be communicating with. */
395+
SocketIO::ServerObject getATargetServer() {
396+
exists(NPMPackage pkg |
397+
result.getOrigin().getFile() = pkg.getAFile() and
398+
this.getFile() = pkg.getAFile() and
399+
exists(result.getNamespace(getNamespacePath()))
400+
)
401+
}
402+
403+
/** Gets a namespace this socket may be communicating with. */
404+
SocketIO::NamespaceObject getATargetNamespace() {
405+
result = getATargetServer().getNamespace(getNamespacePath())
406+
}
407+
408+
/** Gets a server-side socket this client-side socket may be communicating with. */
409+
SocketIO::SocketNode getATargetSocket() { result.getNamespace() = getATargetNamespace() }
378410
}
379411

380412
/**
@@ -407,6 +439,12 @@ module SocketIOClient {
407439
result = getCallback(1).getLastParameter() and
408440
exists(result.getAnInvocation())
409441
}
442+
443+
/** Gets a server-side node that may be sending the data received here. */
444+
SocketIO::SendNode getASender() {
445+
result.getNamespace() = getSocket().getATargetNamespace() and
446+
not result.getEventName() != getEventName()
447+
}
410448
}
411449

412450
/**
@@ -459,6 +497,12 @@ module SocketIOClient {
459497

460498
/** Gets the acknowledgment callback, if any. */
461499
DataFlow::FunctionNode getAck() { result = getLastArgument().getALocalSource() }
500+
501+
/** Gets a server-side node that may be receiving the data sent here. */
502+
SocketIO::ReceiveNode getAReceiver() {
503+
result.getSocket().getNamespace() = getSocket().getATargetNamespace() and
504+
not result.getEventName() != getEventName()
505+
}
462506
}
463507
}
464508

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
| client2.js:4:1:6:2 | sock.on ... y);\\n}) | client2.js:1:12:1:56 | require ... lhost") |
22
| client2.js:8:1:8:33 | sock.on ... => {}) | client2.js:1:12:1:56 | require ... lhost") |
33
| client2.js:10:1:12:2 | sock.on ... d");\\n}) | client2.js:1:12:1:56 | require ... lhost") |
4+
| client2.js:18:1:20:2 | sock2.o ... (x);\\n}) | client2.js:2:13:2:85 | require ... v#abc") |
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
| client2.js:4:1:6:2 | sock.on ... y);\\n}) | tst.js:31:1:31:20 | ns.send('a message') |
2+
| client2.js:4:1:6:2 | sock.on ... y);\\n}) | tst.js:39:1:39:31 | io.emit ... ssage') |
3+
| client2.js:4:1:6:2 | sock.on ... y);\\n}) | tst.js:40:1:40:20 | io.send('a message') |
4+
| client2.js:4:1:6:2 | sock.on ... y);\\n}) | tst.js:41:1:41:21 | io.writ ... ssage') |
5+
| client2.js:4:1:6:2 | sock.on ... y);\\n}) | tst.js:54:3:54:43 | socket. ... => {}) |
6+
| client2.js:4:1:6:2 | sock.on ... y);\\n}) | tst.js:55:3:55:27 | socket. ... ssage') |
7+
| client2.js:8:1:8:33 | sock.on ... => {}) | tst.js:30:1:30:28 | ns.emit ... event') |
8+
| client2.js:8:1:8:33 | sock.on ... => {}) | tst.js:31:1:31:20 | ns.send('a message') |
9+
| client2.js:8:1:8:33 | sock.on ... => {}) | tst.js:39:1:39:31 | io.emit ... ssage') |
10+
| client2.js:8:1:8:33 | sock.on ... => {}) | tst.js:40:1:40:20 | io.send('a message') |
11+
| client2.js:8:1:8:33 | sock.on ... => {}) | tst.js:41:1:41:21 | io.writ ... ssage') |
12+
| client2.js:8:1:8:33 | sock.on ... => {}) | tst.js:51:3:51:22 | socket.emit('event') |
13+
| client2.js:8:1:8:33 | sock.on ... => {}) | tst.js:54:3:54:43 | socket. ... => {}) |
14+
| client2.js:8:1:8:33 | sock.on ... => {}) | tst.js:55:3:55:27 | socket. ... ssage') |
15+
| client2.js:10:1:12:2 | sock.on ... d");\\n}) | tst.js:30:1:30:28 | ns.emit ... event') |
16+
| client2.js:10:1:12:2 | sock.on ... d");\\n}) | tst.js:51:3:51:22 | socket.emit('event') |
17+
| client2.js:18:1:20:2 | sock2.o ... (x);\\n}) | tst.js:32:1:32:22 | ns2.wri ... ssage') |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import javascript
2+
3+
from SocketIOClient::ReceiveNode rn
4+
select rn, rn.getASender()
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
| client2.js:10:1:12:2 | sock.on ... d");\\n}) | client2.js:10:21:10:22 | cb |
1+
| client2.js:10:1:12:2 | sock.on ... d");\\n}) | client2.js:10:22:10:23 | cb |
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
| client2.js:4:1:6:2 | sock.on ... y);\\n}) | message |
2-
| client2.js:10:1:12:2 | sock.on ... d");\\n}) | data |
2+
| client2.js:10:1:12:2 | sock.on ... d");\\n}) | event |
3+
| client2.js:18:1:20:2 | sock2.o ... (x);\\n}) | message |
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
| client2.js:4:1:6:2 | sock.on ... y);\\n}) | 0 | client2.js:4:21:4:21 | x |
22
| client2.js:4:1:6:2 | sock.on ... y);\\n}) | 1 | client2.js:4:24:4:24 | y |
33
| client2.js:8:1:8:33 | sock.on ... => {}) | 0 | client2.js:8:23:8:25 | msg |
4-
| client2.js:10:1:12:2 | sock.on ... d");\\n}) | 0 | client2.js:10:18:10:18 | x |
4+
| client2.js:10:1:12:2 | sock.on ... d");\\n}) | 0 | client2.js:10:19:10:19 | x |
5+
| client2.js:18:1:20:2 | sock2.o ... (x);\\n}) | 0 | client2.js:18:22:18:22 | x |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
| client2.js:14:1:14:32 | sock.em ... there") | tst.js:72:3:72:43 | socket. ... => {}) |
2+
| client2.js:16:1:16:36 | sock.wr ... => {}) | tst.js:70:3:70:35 | socket. ... => {}) |
3+
| client2.js:16:1:16:36 | sock.wr ... => {}) | tst.js:71:3:71:46 | socket. ... => {}) |
4+
| client2.js:16:1:16:36 | sock.wr ... => {}) | tst.js:72:3:72:43 | socket. ... => {}) |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import javascript
2+
3+
from SocketIOClient::SendNode sn
4+
select sn, sn.getAReceiver()
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
| client1.js:1:1:1:4 | io() | / |
22
| client1.js:2:1:2:23 | io.conn ... sages") | /messages |
33
| client2.js:1:12:1:56 | require ... lhost") | / |
4-
| client2.js:2:1:2:73 | require ... v#abc") | /foo/bar |
4+
| client2.js:2:13:2:85 | require ... v#abc") | /foo/bar |
55
| client3.js:3:1:3:4 | io() | / |

0 commit comments

Comments
 (0)