Merge pull request #4996 from esbena/js/nodejs-client-request-event-emitter

Approved by erik-krogh
This commit is contained in:
CodeQL CI
2021-01-21 12:37:00 -08:00
committed by GitHub
6 changed files with 69 additions and 4 deletions

View File

@@ -826,7 +826,7 @@ module NodeJSLib {
/**
* A model of a URL request in the Node.js `http` library.
*/
private class NodeHttpUrlRequest extends NodeJSClientRequest::Range {
private class NodeHttpUrlRequest extends NodeJSClientRequest::Range, NodeJSEventEmitter {
DataFlow::Node url;
NodeHttpUrlRequest() {
@@ -881,8 +881,11 @@ module NodeJSLib {
exists(DataFlow::MethodCallNode mcn |
clientRequest.getAMethodCall(EventEmitter::on()) = mcn and
mcn.getArgument(0).mayHaveStringValue(handledEvent) and
flowsTo(mcn.getArgument(1))
this.flowsTo(mcn.getArgument(1))
)
or
this.flowsTo(clientRequest.(DataFlow::CallNode).getLastArgument()) and
handledEvent = "connection"
}
/**
@@ -1060,6 +1063,27 @@ module NodeJSLib {
}
}
/**
* An HTTP request event handler parameter as an EventEmitter, for
* example the function `emitter` in either of the following:
*
* ```
* http.request(x, emitter => {...})
* ```
*
* ```
* http.request(...).on(y, emitter => { ...})
* ```
*/
private class ClientRequestEventEmitter extends NodeJSEventEmitter {
ClientRequestEventEmitter() {
exists(ClientRequestHandler handler |
not handler.getAHandledEvent() = "error" and
this = handler.getAParameter()
)
}
}
/**
* A registration of an event handler on a NodeJS EventEmitter instance.
*/