mirror of
https://github.com/github/codeql.git
synced 2026-05-02 12:15:17 +02:00
JS: use extensible architecture for Electron- and NodeClientRequest
This commit is contained in:
@@ -10,7 +10,7 @@ import javascript
|
||||
/**
|
||||
* A call that performs a request to a URL.
|
||||
*/
|
||||
class CustomClientRequest extends DataFlow::CallNode {
|
||||
class CustomClientRequest extends DataFlow::InvokeNode {
|
||||
|
||||
/**
|
||||
* Gets the URL of the request.
|
||||
@@ -21,7 +21,7 @@ class CustomClientRequest extends DataFlow::CallNode {
|
||||
/**
|
||||
* A call that performs a request to a URL.
|
||||
*/
|
||||
class ClientRequest extends DataFlow::CallNode {
|
||||
class ClientRequest extends DataFlow::InvokeNode {
|
||||
|
||||
CustomClientRequest custom;
|
||||
|
||||
|
||||
@@ -33,29 +33,51 @@ module Electron {
|
||||
this = DataFlow::moduleMember("electron", "BrowserView").getAnInstantiation()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A Node.js-style HTTP or HTTPS request made using an Electron module.
|
||||
*/
|
||||
abstract class ElectronClientRequest extends NodeJSLib::NodeJSClientRequest {}
|
||||
abstract class CustomElectronClientRequest extends NodeJSLib::CustomNodeJSClientRequest {}
|
||||
|
||||
/**
|
||||
* A Node.js-style HTTP or HTTPS request made using an Electron module.
|
||||
*/
|
||||
class ElectronClientRequest extends NodeJSLib::NodeJSClientRequest {
|
||||
|
||||
ElectronClientRequest() {
|
||||
this instanceof CustomElectronClientRequest
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* A Node.js-style HTTP or HTTPS request made using `electron.net`, for example `net.request(url)`.
|
||||
*/
|
||||
private class NetRequest extends ElectronClientRequest {
|
||||
private class NetRequest extends CustomElectronClientRequest {
|
||||
NetRequest() {
|
||||
this = DataFlow::moduleMember("electron", "net").getAMemberCall("request")
|
||||
}
|
||||
|
||||
override DataFlow::Node getUrl() {
|
||||
result = getArgument(0) or
|
||||
result = getOptionArgument(0, "url")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* A Node.js-style HTTP or HTTPS request made using `electron.client`, for example `new client(url)`.
|
||||
*/
|
||||
private class NewClientRequest extends ElectronClientRequest {
|
||||
private class NewClientRequest extends CustomElectronClientRequest {
|
||||
NewClientRequest() {
|
||||
this = DataFlow::moduleMember("electron", "ClientRequest").getAnInstantiation()
|
||||
}
|
||||
|
||||
override DataFlow::Node getUrl() {
|
||||
result = getArgument(0) or
|
||||
result = getOptionArgument(0, "url")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -504,14 +504,25 @@ module NodeJSLib {
|
||||
/**
|
||||
* A data flow node that is an HTTP or HTTPS client request made by a Node.js application, for example `http.request(url)`.
|
||||
*/
|
||||
abstract class NodeJSClientRequest extends DataFlow::DefaultSourceNode {
|
||||
abstract class CustomNodeJSClientRequest extends CustomClientRequest {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* A data flow node that is an HTTP or HTTPS client request made by a Node.js application, for example `http.request(url)`.
|
||||
*/
|
||||
class NodeJSClientRequest extends ClientRequest {
|
||||
|
||||
NodeJSClientRequest() {
|
||||
this instanceof CustomNodeJSClientRequest
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* A model of a URL request in the Node.js `http` library.
|
||||
*/
|
||||
private class NodeHttpUrlRequest extends CustomClientRequest, NodeJSClientRequest {
|
||||
private class NodeHttpUrlRequest extends CustomNodeJSClientRequest {
|
||||
|
||||
DataFlow::Node url;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user