@@ -463,16 +463,11 @@ module ClientRequest {
463
463
}
464
464
465
465
/**
466
- * Gets an instantiation `socket` of `require("net").Socket` type tracked using `t` .
466
+ * Gets an instantiation `socket` of `require("net").Socket`.
467
467
*/
468
- private DataFlow:: SourceNode netSocketInstantiation (
469
- DataFlow:: TypeTracker t , DataFlow:: NewNode socket
470
- ) {
471
- t .start ( ) and
472
- socket = DataFlow:: moduleMember ( "net" , "Socket" ) .getAnInstantiation ( ) and
473
- result = socket
474
- or
475
- exists ( DataFlow:: TypeTracker t2 | result = netSocketInstantiation ( t2 , socket ) .track ( t2 , t ) )
468
+ private API:: Node netSocketInstantiation ( DataFlow:: NewNode socket ) {
469
+ result = API:: moduleImport ( "net" ) .getMember ( "Socket" ) .getInstance ( ) and
470
+ socket = result .getAnImmediateUse ( )
476
471
}
477
472
478
473
/**
@@ -481,9 +476,7 @@ module ClientRequest {
481
476
class NetSocketRequest extends ClientRequest:: Range {
482
477
DataFlow:: NewNode socket ;
483
478
484
- NetSocketRequest ( ) {
485
- this = netSocketInstantiation ( DataFlow:: TypeTracker:: end ( ) , socket ) .getAMethodCall ( "connect" )
486
- }
479
+ NetSocketRequest ( ) { this = netSocketInstantiation ( socket ) .getMember ( "connect" ) .getACall ( ) }
487
480
488
481
override DataFlow:: Node getUrl ( ) {
489
482
result = this .getArgument ( [ 0 , 1 ] ) // there are multiple overrides of `connect`, and the URL can be in the first or second argument.
@@ -495,15 +488,15 @@ module ClientRequest {
495
488
responseType = "text" and
496
489
promise = false and
497
490
exists ( DataFlow:: CallNode call |
498
- call = netSocketInstantiation ( DataFlow :: TypeTracker :: end ( ) , socket ) .getAMemberCall ( "on" ) and
491
+ call = netSocketInstantiation ( socket ) .getMember ( "on" ) . getACall ( ) and
499
492
call .getArgument ( 0 ) .mayHaveStringValue ( "data" ) and
500
493
result = call .getABoundCallbackParameter ( 1 , 0 )
501
494
)
502
495
}
503
496
504
497
override DataFlow:: Node getADataNode ( ) {
505
498
exists ( DataFlow:: CallNode call |
506
- call = netSocketInstantiation ( DataFlow :: TypeTracker :: end ( ) , socket ) .getAMemberCall ( "write" ) and
499
+ call = netSocketInstantiation ( socket ) .getMember ( "write" ) . getACall ( ) and
507
500
result = call .getArgument ( 0 )
508
501
)
509
502
}
@@ -713,22 +706,15 @@ module ClientRequest {
713
706
* Gets a reference to an instance of `chrome-remote-interface`.
714
707
*
715
708
* An instantiation of `chrome-remote-interface` either accepts a callback or returns a promise.
716
- *
717
- * The `isPromise` parameter reflects whether the reference is a promise containing
718
- * an instance of `chrome-remote-interface`, or an instance of `chrome-remote-interface`.
719
709
*/
720
- private DataFlow:: SourceNode chromeRemoteInterface ( DataFlow:: TypeTracker t ) {
721
- exists ( DataFlow:: CallNode call |
722
- call = DataFlow:: moduleImport ( "chrome-remote-interface" ) .getAnInvocation ( )
723
- |
710
+ private API:: Node chromeRemoteInterface ( ) {
711
+ exists ( API:: CallNode call | call = API:: moduleImport ( "chrome-remote-interface" ) .getACall ( ) |
724
712
// the client is inside in a promise.
725
- t . startInPromise ( ) and result = call
713
+ result = call . getReturn ( ) . getPromised ( )
726
714
or
727
715
// the client is accessed directly using a callback.
728
- t . start ( ) and result = call .getCallback ( [ 0 .. 1 ] ) .getParameter ( 0 )
716
+ result = call .getParameter ( [ 0 .. 1 ] ) .getParameter ( 0 )
729
717
)
730
- or
731
- exists ( DataFlow:: TypeTracker t2 | result = chromeRemoteInterface ( t2 ) .track ( t2 , t ) )
732
718
}
733
719
734
720
/**
@@ -738,14 +724,12 @@ module ClientRequest {
738
724
int optionsArg ;
739
725
740
726
ChromeRemoteInterfaceRequest ( ) {
741
- exists ( DataFlow:: SourceNode instance |
742
- instance = chromeRemoteInterface ( DataFlow:: TypeTracker:: end ( ) )
743
- |
727
+ exists ( API:: Node instance | instance = chromeRemoteInterface ( ) |
744
728
optionsArg = 0 and
745
- this = instance .getAPropertyRead ( "Page" ) .getAMemberCall ( "navigate" )
729
+ this = instance .getMember ( "Page" ) .getMember ( "navigate" ) . getACall ( )
746
730
or
747
731
optionsArg = 1 and
748
- this = instance .getAMemberCall ( "send" ) and
732
+ this = instance .getMember ( "send" ) . getACall ( ) and
749
733
this .getArgument ( 0 ) .mayHaveStringValue ( "Page.navigate" )
750
734
)
751
735
}
0 commit comments