Skip to content

Commit 53ac6b5

Browse files
committed
Added support for superagent.agent().
1 parent 2983b08 commit 53ac6b5

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,17 +520,26 @@ module ClientRequest {
520520
DataFlow::Node url;
521521

522522
SuperAgentUrlRequest() {
523-
exists(string moduleName, DataFlow::SourceNode callee | this = callee.getACall() |
523+
exists(string moduleName, DataFlow::SourceNode callee |
524524
moduleName = "superagent" and
525525
(
526+
this = callee.getACall() and
526527
// Handle method calls like superagent.get(url)
527528
callee = DataFlow::moduleMember(moduleName, httpMethodName()) and
528529
url = this.getArgument(0)
529530
or
531+
this = callee.getACall() and
530532
// Handle direct calls like superagent('GET', url)
531533
callee = DataFlow::moduleImport(moduleName) and
532534
this.getArgument(0).mayHaveStringValue([httpMethodName().toUpperCase(), httpMethodName()]) and
533535
url = this.getArgument(1)
536+
or
537+
// Handle agent calls like superagent.agent().get(url)
538+
exists(DataFlow::SourceNode agent |
539+
agent = DataFlow::moduleMember(moduleName, "agent").getACall() and
540+
this = agent.getAMethodCall(httpMethodName()) and
541+
url = this.getArgument(0)
542+
)
534543
)
535544
)
536545
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ test_ClientRequest
9393
| tst.js:312:12:312:36 | fetchPo ... o/bar') |
9494
| tst.js:319:5:319:26 | superag ... ', url) |
9595
| tst.js:320:5:320:23 | superagent.del(url) |
96+
| tst.js:321:5:321:32 | superag ... st(url) |
9697
test_getADataNode
9798
| axiosTest.js:12:5:17:6 | axios({ ... \\n }) | axiosTest.js:15:18:15:55 | { 'Cont ... json' } |
9899
| axiosTest.js:12:5:17:6 | axios({ ... \\n }) | axiosTest.js:16:15:16:35 | {x: 'te ... 'test'} |
@@ -134,6 +135,7 @@ test_getADataNode
134135
| tst.js:249:1:251:2 | form.su ... e();\\n}) | tst.js:247:24:247:68 | request ... o.png') |
135136
| tst.js:257:1:262:2 | form.su ... rs()\\n}) | tst.js:255:25:255:35 | 'new_value' |
136137
| tst.js:286:20:286:55 | new Web ... :8080') | tst.js:288:21:288:35 | 'Hello Server!' |
138+
| tst.js:321:5:321:32 | superag ... st(url) | tst.js:321:39:321:42 | data |
137139
test_getHost
138140
| tst.js:87:5:87:39 | http.ge ... host}) | tst.js:87:34:87:37 | host |
139141
| tst.js:89:5:89:23 | axios({host: host}) | tst.js:89:18:89:21 | host |
@@ -244,6 +246,7 @@ test_getUrl
244246
| tst.js:312:12:312:36 | fetchPo ... o/bar') | tst.js:312:26:312:35 | '/foo/bar' |
245247
| tst.js:319:5:319:26 | superag ... ', url) | tst.js:319:23:319:25 | url |
246248
| tst.js:320:5:320:23 | superagent.del(url) | tst.js:320:20:320:22 | url |
249+
| tst.js:321:5:321:32 | superag ... st(url) | tst.js:321:29:321:31 | url |
247250
test_getAResponseDataNode
248251
| axiosTest.js:4:5:7:6 | axios({ ... \\n }) | axiosTest.js:4:5:7:6 | axios({ ... \\n }) | json | true |
249252
| axiosTest.js:12:5:17:6 | axios({ ... \\n }) | axiosTest.js:12:5:17:6 | axios({ ... \\n }) | json | true |
@@ -320,3 +323,4 @@ test_getAResponseDataNode
320323
| tst.js:312:12:312:36 | fetchPo ... o/bar') | tst.js:312:12:312:36 | fetchPo ... o/bar') | fetch.response | true |
321324
| tst.js:319:5:319:26 | superag ... ', url) | tst.js:319:5:319:26 | superag ... ', url) | stream | true |
322325
| tst.js:320:5:320:23 | superagent.del(url) | tst.js:320:5:320:23 | superagent.del(url) | stream | true |
326+
| tst.js:321:5:321:32 | superag ... st(url) | tst.js:321:5:321:32 | superag ... st(url) | stream | true |

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,5 +318,5 @@ function usePolyfill() {
318318
function useSuperagent(url){
319319
superagent('GET', url);
320320
superagent.del(url);
321-
superagent.agent().post(url).send(data); // Not flagged
321+
superagent.agent().post(url).send(data);
322322
}

0 commit comments

Comments
 (0)