@@ -110,29 +110,37 @@ module ClientRequest {
110110 */
111111 private string httpMethodName ( ) { result = any ( HTTP:: RequestMethodName m ) .toLowerCase ( ) }
112112
113+ /**
114+ * Gets a model of an instance of the `request` library, or one of
115+ * its wrappers, `promise` is true if the instance uses promises
116+ * rather than callbacks.
117+ */
118+ private DataFlow:: SourceNode getRequestLibrary ( boolean promise ) {
119+ exists ( string moduleName | result = DataFlow:: moduleImport ( moduleName ) |
120+ promise = false and
121+ moduleName = "request"
122+ or
123+ promise = true and
124+ (
125+ moduleName = "request-promise" or
126+ moduleName = "request-promise-any" or
127+ moduleName = "request-promise-native"
128+ )
129+ )
130+ or
131+ result = getRequestLibrary ( promise ) .getAMethodCall ( "defaults" )
132+ }
133+
113134 /**
114135 * A model of a URL request made using the `request` library.
115136 */
116137 class RequestUrlRequest extends ClientRequest:: Range , DataFlow:: CallNode {
117138 boolean promise ;
118139
119140 RequestUrlRequest ( ) {
120- exists ( string moduleName , DataFlow:: SourceNode callee | this = callee .getACall ( ) |
121- (
122- promise = false and
123- moduleName = "request"
124- or
125- promise = true and
126- (
127- moduleName = "request-promise" or
128- moduleName = "request-promise-any" or
129- moduleName = "request-promise-native"
130- )
131- ) and
132- (
133- callee = DataFlow:: moduleImport ( moduleName ) or
134- callee = DataFlow:: moduleMember ( moduleName , httpMethodName ( ) )
135- )
141+ exists ( DataFlow:: SourceNode callee | this = callee .getACall ( ) |
142+ callee = getRequestLibrary ( promise ) or
143+ callee = getRequestLibrary ( promise ) .getAPropertyRead ( httpMethodName ( ) )
136144 )
137145 }
138146
0 commit comments