mirror of
https://github.com/github/codeql.git
synced 2026-05-20 22:27:18 +02:00
JS: core improvements
This commit is contained in:
@@ -28,6 +28,7 @@ string getAStandardLoggerMethodName() {
|
||||
result = "notice" or
|
||||
result = "silly" or
|
||||
result = "trace" or
|
||||
result = "verbose" or
|
||||
result = "warn"
|
||||
}
|
||||
|
||||
@@ -131,3 +132,30 @@ private module log4js {
|
||||
override DataFlow::Node getAMessageComponent() { result = getAnArgument() }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides classes for working with [npmlog](https://github.com/npm/npmlog)
|
||||
*/
|
||||
private module Npmlog {
|
||||
/**
|
||||
* A call to the console logging mechanism.
|
||||
*/
|
||||
class Npmlog extends LoggerCall {
|
||||
string name;
|
||||
|
||||
Npmlog() {
|
||||
this = DataFlow::moduleMember("npmlog", name).getACall() and
|
||||
name = getAStandardLoggerMethodName()
|
||||
}
|
||||
|
||||
override DataFlow::Node getAMessageComponent() {
|
||||
(
|
||||
if name = "log"
|
||||
then result = getArgument([1 .. getNumArgument()])
|
||||
else result = getAnArgument()
|
||||
)
|
||||
or
|
||||
result = getASpreadArgument()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -444,9 +444,11 @@ module NodeJSLib {
|
||||
* A member `member` from module `fs` or its drop-in replacements `graceful-fs`, `fs-extra`, `original-fs`.
|
||||
*/
|
||||
DataFlow::SourceNode moduleMember(string member) {
|
||||
result = fsModule(DataFlow::TypeTracker::end()).getAPropertyRead(member)
|
||||
result = fsModule().getAPropertyRead(member)
|
||||
}
|
||||
|
||||
DataFlow::SourceNode fsModule() { result = fsModule(DataFlow::TypeTracker::end()) }
|
||||
|
||||
private DataFlow::SourceNode fsModule(DataFlow::TypeTracker t) {
|
||||
exists(string moduleName |
|
||||
moduleName = ["mz/fs", "original-fs", "fs-extra", "graceful-fs", "fs"]
|
||||
@@ -468,7 +470,15 @@ module NodeJSLib {
|
||||
private class NodeJSFileSystemAccess extends FileSystemAccess, DataFlow::CallNode {
|
||||
string methodName;
|
||||
|
||||
NodeJSFileSystemAccess() { this = maybePromisified(FS::moduleMember(methodName)).getACall() }
|
||||
NodeJSFileSystemAccess() {
|
||||
this = maybePromisified(FS::moduleMember(methodName)).getACall()
|
||||
or
|
||||
exists(DataFlow::CallNode promisifyAll |
|
||||
promisifyAll = DataFlow::moduleMember("bluebird", "promisifyAll").getACall() and
|
||||
FS::fsModule().flowsTo(promisifyAll.getArgument(0)) and
|
||||
this = promisifyAll.getAMemberCall(methodName)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name of the called method.
|
||||
@@ -604,7 +614,7 @@ module NodeJSLib {
|
||||
result = callback
|
||||
or
|
||||
exists(DataFlow::CallNode promisify |
|
||||
promisify = DataFlow::moduleMember("util", "promisify").getACall()
|
||||
promisify = DataFlow::moduleMember(["util", "bluebird"], "promisify").getACall()
|
||||
|
|
||||
result = promisify and promisify.getArgument(0).getALocalSource() = callback
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user