Skip to content

Commit 4d77902

Browse files
authored
Merge pull request #1479 from xiemaisi/js/remove-circularity
Approved by asger-semmle
2 parents eccf153 + 4370f25 commit 4d77902

File tree

4 files changed

+14
-6
lines changed

4 files changed

+14
-6
lines changed

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ module NodeJSLib {
1313
*/
1414
private class ImplicitProcessImport extends DataFlow::ModuleImportNode::Range {
1515
ImplicitProcessImport() {
16-
this = DataFlow::globalVarRef("process") and
16+
exists(GlobalVariable process |
17+
process.getName() = "process" and
18+
this = DataFlow::exprNode(process.getAnAccess())
19+
) and
1720
getTopLevel() instanceof NodeModule
1821
}
1922

@@ -24,9 +27,17 @@ module NodeJSLib {
2427
* Gets a reference to the 'process' object.
2528
*/
2629
DataFlow::SourceNode process() {
30+
result = DataFlow::globalVarRef("process") or
2731
result = DataFlow::moduleImport("process")
2832
}
2933

34+
/**
35+
* Gets a reference to a member of the 'process' object.
36+
*/
37+
private DataFlow::SourceNode processMember(string member) {
38+
result = process().getAPropertyRead(member)
39+
}
40+
3041
/**
3142
* Holds if `call` is an invocation of `http.createServer` or `https.createServer`.
3243
*/
@@ -365,7 +376,7 @@ module NodeJSLib {
365376
ProcessTermination() {
366377
this = DataFlow::moduleImport("exit").getAnInvocation()
367378
or
368-
this = DataFlow::moduleMember("process", "exit").getACall()
379+
this = processMember("exit").getACall()
369380
}
370381
}
371382

javascript/ql/test/library-tests/ModuleImportNodes/TSGlobalImport.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,3 @@
1616
| process2.js:1:1:1:13 | require('fs') | fs |
1717
| process2.js:2:10:2:16 | process | process |
1818
| process.js:1:10:1:27 | require('process') | process |
19-
| process.js:2:10:2:23 | global.process | process |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
var p1 = require('process');
2-
var p2 = global.process;
2+
var p2 = global.process; // not detected yet

javascript/ql/test/library-tests/ModuleImportNodes/tests.expected

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ test_moduleImport
4444
| net | client1.ts:6:9:6:11 | net |
4545
| process | process2.js:2:10:2:16 | process |
4646
| process | process.js:1:10:1:27 | require('process') |
47-
| process | process.js:2:10:2:23 | global.process |
4847
test_moduleMember
4948
| electron | BrowserWindow | destructuringES6.js:1:10:1:22 | BrowserWindow |
5049
| electron | BrowserWindow | destructuringRequire.js:1:9:1:21 | BrowserWindow |
@@ -78,7 +77,6 @@ test_ModuleImportNode_getPath
7877
| process2.js:1:1:1:13 | require('fs') | fs |
7978
| process2.js:2:10:2:16 | process | process |
8079
| process.js:1:10:1:27 | require('process') | process |
81-
| process.js:2:10:2:23 | global.process | process |
8280
test_ModuleImportNode_getAMethodCall
8381
| amd1.js:1:25:1:26 | fs | amd1.js:2:3:2:29 | fs.read ... a.txt") |
8482
| amd2.js:2:12:2:24 | require('fs') | amd2.js:3:3:3:29 | fs.read ... a.txt") |

0 commit comments

Comments
 (0)