Skip to content

Commit c097031

Browse files
author
Max Schaefer
committed
JavaScript: Fix uses of TypeTracker with custom flow steps.
These steps need to check that the type hasn't been tracked into a property.
1 parent b2faac3 commit c097031

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ module SocketIO {
5151
// exclude getter versions
5252
exists(mcn.getAnArgument()) and
5353
result = mcn and
54+
t2.getProp() = "" and
5455
t = t2
5556
)
5657
)
@@ -110,6 +111,7 @@ module SocketIO {
110111
or
111112
// invocation of a chainable method
112113
result = pred.getAMethodCall(namespaceChainableMethod()) and
114+
t2.getProp() = "" and
113115
t = t2
114116
or
115117
// invocation of chainable getter method
@@ -119,6 +121,7 @@ module SocketIO {
119121
m = "volatile"
120122
|
121123
result = pred.getAPropertyRead(m) and
124+
t2.getProp() = "" and
122125
t = t2
123126
)
124127
)
@@ -171,6 +174,7 @@ module SocketIO {
171174
m = EventEmitter::chainableMethod()
172175
|
173176
result = pred.getAMethodCall(m) and
177+
t2.getProp() = "" and
174178
t = t2
175179
)
176180
or
@@ -182,6 +186,7 @@ module SocketIO {
182186
m = "volatile"
183187
|
184188
result = pred.getAPropertyRead(m) and
189+
t2.getProp() = "" and
185190
t = t2
186191
)
187192
)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ test_ServerNode
149149
| tst.js:15:1:15:15 | io.attach(http) | tst.js:1:12:1:33 | socket.io server |
150150
| tst.js:16:1:16:15 | io.bind(engine) | tst.js:1:12:1:33 | socket.io server |
151151
| tst.js:17:1:17:23 | io.onco ... socket) | tst.js:1:12:1:33 | socket.io server |
152+
| tst.js:79:1:79:10 | obj.server | tst.js:1:12:1:33 | socket.io server |
152153
test_ClientSendNode_getAReceiver
153154
| client2.js:14:1:14:32 | sock.em ... there") | tst.js:72:3:72:43 | socket. ... => {}) |
154155
| client2.js:16:1:16:36 | sock.wr ... => {}) | tst.js:70:3:70:35 | socket. ... => {}) |

javascript/ql/test/library-tests/frameworks/SocketIO/tst.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,11 @@ ns.on('connection', (socket) => {
7171
socket.once('message', (data1, data2) => {});
7272
socket.addListener(eventName(), () => {});
7373
});
74+
75+
var obj = {
76+
server: io,
77+
serveClient: function() { return null; }
78+
};
79+
obj.server; // SocketIO::ServerNode
80+
obj.serveClient(false); // not a SocketIO::ServerNode
81+
obj.serveClient(false).server; // not a SocketIO::ServerNode

0 commit comments

Comments
 (0)