File tree 6 files changed +57
-4
lines changed
src/semmle/javascript/frameworks
test/library-tests/frameworks
6 files changed +57
-4
lines changed Original file line number Diff line number Diff line change @@ -826,7 +826,7 @@ module NodeJSLib {
826
826
/**
827
827
* A model of a URL request in the Node.js `http` library.
828
828
*/
829
- private class NodeHttpUrlRequest extends NodeJSClientRequest:: Range {
829
+ private class NodeHttpUrlRequest extends NodeJSClientRequest:: Range , NodeJSEventEmitter {
830
830
DataFlow:: Node url ;
831
831
832
832
NodeHttpUrlRequest ( ) {
@@ -881,8 +881,11 @@ module NodeJSLib {
881
881
exists ( DataFlow:: MethodCallNode mcn |
882
882
clientRequest .getAMethodCall ( EventEmitter:: on ( ) ) = mcn and
883
883
mcn .getArgument ( 0 ) .mayHaveStringValue ( handledEvent ) and
884
- flowsTo ( mcn .getArgument ( 1 ) )
884
+ this . flowsTo ( mcn .getArgument ( 1 ) )
885
885
)
886
+ or
887
+ this .flowsTo ( clientRequest .( DataFlow:: CallNode ) .getLastArgument ( ) ) and
888
+ handledEvent = "connection"
886
889
}
887
890
888
891
/**
@@ -1060,6 +1063,15 @@ module NodeJSLib {
1060
1063
}
1061
1064
}
1062
1065
1066
+ private class ClientRequestEventEmitter extends NodeJSEventEmitter {
1067
+ ClientRequestEventEmitter ( ) {
1068
+ exists ( ClientRequestHandler handler |
1069
+ not handler .getAHandledEvent ( ) = "error" and
1070
+ this = handler .getAParameter ( )
1071
+ )
1072
+ }
1073
+ }
1074
+
1063
1075
/**
1064
1076
* A registration of an event handler on a NodeJS EventEmitter instance.
1065
1077
*/
Original file line number Diff line number Diff line change
1
+ taintSteps
1
2
| customEmitter.js:5:20:5:24 | "bar" | customEmitter.js:6:19:6:22 | data |
2
3
| customEmitter.js:12:21:12:25 | "baz" | customEmitter.js:13:23:13:26 | data |
3
4
| customEmitter.js:12:21:12:25 | "baz" | customEmitter.js:22:14:22:18 | yData |
15
16
| tst.js:40:20:40:27 | "yabity" | tst.js:39:19:39:19 | x |
16
17
| tst.js:46:28:46:38 | 'FirstData' | tst.js:43:45:43:49 | first |
17
18
| tst.js:47:29:47:40 | 'SecondData' | tst.js:44:37:44:42 | second |
19
+ eventEmitter
20
+ | customEmitter.js:3:1:8:1 | class M ... );\\n\\t}\\n} |
21
+ | customEmitter.js:17:9:17:29 | new MyS ... itter() |
22
+ | customEmitter.js:20:9:20:29 | new MyS ... itter() |
23
+ | tst2.js:6:12:6:42 | new Con ... , opts) |
24
+ | tst2.js:16:10:16:24 | new Connector() |
25
+ | tst2.js:22:12:24:2 | http.re ... {});\\n}) |
26
+ | tst2.js:22:37:22:39 | res |
27
+ | tst2.js:25:28:25:33 | socket |
28
+ | tst2.js:29:12:31:2 | http.re ... {});\\n}) |
29
+ | tst2.js:29:37:29:39 | res |
30
+ | tst2.js:32:28:32:33 | socket |
31
+ | tst.js:3:10:3:22 | new emitter() |
32
+ | tst.js:13:11:13:23 | new emitter() |
33
+ | tst.js:18:11:18:23 | new emitter() |
34
+ | tst.js:24:11:24:23 | new emitter() |
35
+ | tst.js:32:11:32:30 | new MyEventEmitter() |
36
+ | tst.js:38:11:38:38 | new Ext ... itter() |
37
+ | tst.js:42:15:42:32 | require('process') |
Original file line number Diff line number Diff line change @@ -3,3 +3,5 @@ import javascript
3
3
query predicate taintSteps ( DataFlow:: Node pred , DataFlow:: Node succ ) {
4
4
exists ( DataFlow:: AdditionalFlowStep step | step .step ( pred , succ ) )
5
5
}
6
+
7
+ query predicate eventEmitter ( EventEmitter e ) { any ( ) }
Original file line number Diff line number Diff line change 1
- var util = require ( ' util' ) ;
2
- var EventEmitter = require ( ' events' ) . EventEmitter ;
1
+ var util = require ( " util" ) ;
2
+ var EventEmitter = require ( " events" ) . EventEmitter ;
3
3
4
4
var Connector = function ( ) {
5
5
if ( ! ( this instanceof Connector ) ) {
@@ -16,3 +16,19 @@ Connector.prototype.foo = function() {};
16
16
var em = new Connector ( ) ;
17
17
em . on ( "foo" , bar => { } ) ;
18
18
em . emit ( "foo" , "bar" ) ;
19
+
20
+ var http = require ( "http" ) ;
21
+
22
+ let req1 = http . request ( x , function ( res ) {
23
+ res . on ( "data" , function ( data ) { } ) ;
24
+ } ) ;
25
+ req1 . on ( "socket" , function ( socket ) {
26
+ socket . on ( "data" , function ( data ) { } ) ;
27
+ } ) ;
28
+
29
+ let req2 = http . request ( x , function ( res ) {
30
+ res . on ( "error" , function ( error ) { } ) ;
31
+ } ) ;
32
+ req2 . on ( "socket" , function ( socket ) {
33
+ socket . on ( "error" , function ( error ) { } ) ;
34
+ } ) ;
Original file line number Diff line number Diff line change
1
+ var http = require ( "http" ) ;
2
+ http . request ( x , data => data . on ( "data" , d => undefined ) ) ;
Original file line number Diff line number Diff line change @@ -96,6 +96,7 @@ test_RouteSetup_getServer
96
96
| src/indirect2.js:18:14:18:35 | http.cr ... er(get) | src/indirect2.js:18:14:18:35 | http.cr ... er(get) |
97
97
| src/indirect.js:34:14:34:58 | http.cr ... dler()) | src/indirect.js:34:14:34:58 | http.cr ... dler()) |
98
98
test_ClientRequest
99
+ | http.js:2:1:2:56 | http.re ... fined)) |
99
100
| src/http.js:18:1:18:30 | http.re ... uth" }) |
100
101
| src/http.js:21:15:26:6 | http.re ... \\n }) |
101
102
| src/http.js:27:16:27:73 | http.re ... POST'}) |
You can’t perform that action at this time.
0 commit comments