Skip to content

Commit 92cc59b

Browse files
authored
Merge pull request github#3800 from esbena/js/npmlog
Approved by erik-krogh
2 parents d4c5887 + 4bfce4b commit 92cc59b

File tree

4 files changed

+39
-0
lines changed

4 files changed

+39
-0
lines changed

change-notes/1.25/analysis-javascript.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
- [minimongo](https://www.npmjs.com/package/minimongo/)
1616
- [mssql](https://www.npmjs.com/package/mssql)
1717
- [mysql](https://www.npmjs.com/package/mysql)
18+
- [npmlog](https://www.npmjs.com/package/npmlog)
1819
- [pg](https://www.npmjs.com/package/pg)
1920
- [sequelize](https://www.npmjs.com/package/sequelize)
2021
- [spanner](https://www.npmjs.com/package/spanner)

javascript/ql/src/semmle/javascript/frameworks/Logging.qll

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ string getAStandardLoggerMethodName() {
2828
result = "notice" or
2929
result = "silly" or
3030
result = "trace" or
31+
result = "verbose" or
3132
result = "warn"
3233
}
3334

@@ -131,3 +132,30 @@ private module log4js {
131132
override DataFlow::Node getAMessageComponent() { result = getAnArgument() }
132133
}
133134
}
135+
136+
/**
137+
* Provides classes for working with [npmlog](https://github.com/npm/npmlog)
138+
*/
139+
private module Npmlog {
140+
/**
141+
* A call to the npmlog logging mechanism.
142+
*/
143+
class Npmlog extends LoggerCall {
144+
string name;
145+
146+
Npmlog() {
147+
this = DataFlow::moduleMember("npmlog", name).getACall() and
148+
name = getAStandardLoggerMethodName()
149+
}
150+
151+
override DataFlow::Node getAMessageComponent() {
152+
(
153+
if name = "log"
154+
then result = getArgument([1 .. getNumArgument()])
155+
else result = getAnArgument()
156+
)
157+
or
158+
result = getASpreadArgument()
159+
}
160+
}
161+
}

javascript/ql/test/library-tests/frameworks/Logging/LoggerCall.expected

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,9 @@
1717
| tst.js:16:1:16:35 | console ... ", arg) | tst.js:16:32:16:34 | arg |
1818
| tst.js:19:1:19:18 | log("msg %s", arg) | tst.js:19:5:19:12 | "msg %s" |
1919
| tst.js:19:1:19:18 | log("msg %s", arg) | tst.js:19:15:19:17 | arg |
20+
| tst.js:21:1:21:44 | require ... ", arg) | tst.js:21:31:21:38 | "msg %s" |
21+
| tst.js:21:1:21:44 | require ... ", arg) | tst.js:21:41:21:43 | arg |
22+
| tst.js:22:1:22:37 | require ... ", arg) | tst.js:22:24:22:31 | "msg %s" |
23+
| tst.js:22:1:22:37 | require ... ", arg) | tst.js:22:34:22:36 | arg |
24+
| tst.js:23:1:23:40 | require ... ", arg) | tst.js:23:27:23:34 | "msg %s" |
25+
| tst.js:23:1:23:40 | require ... ", arg) | tst.js:23:37:23:39 | arg |

javascript/ql/test/library-tests/frameworks/Logging/tst.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,7 @@ console.assert(true, "msg %s", arg);
1717

1818
let log = console.log;
1919
log("msg %s", arg);
20+
21+
require("npmlog").log("info", "msg %s", arg);
22+
require("npmlog").info("msg %s", arg);
23+
require("npmlog").verbose("msg %s", arg);

0 commit comments

Comments
 (0)