Skip to content

Commit 8d8abe0

Browse files
authored
fix(isRequire): do not resolve CallExpr (#200)
1 parent a92a8df commit 8d8abe0

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed

src/probes/isRequire.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ import {
1313
import { ProbeSignals } from "../ProbeRunner.js";
1414

1515
function validateNodeRequire(node, { tracer }) {
16-
const id = getCallExpressionIdentifier(node);
16+
const id = getCallExpressionIdentifier(node, {
17+
resolveCallExpression: false
18+
});
1719
if (id === null) {
1820
return [false];
1921
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Import Node.js Dependencies
2+
import { test } from "node:test";
3+
import assert from "node:assert";
4+
5+
// Import Internal Dependencies
6+
import { runASTAnalysis } from "../../index.js";
7+
8+
/**
9+
* @see https://github.com/NodeSecure/js-x-ray/issues/177
10+
*/
11+
test("should detect unsafe-import and unsafe-statement", () => {
12+
const { warnings, dependencies } = runASTAnalysis(`const help = require('help-me')({
13+
dir: path.join(__dirname, 'help'),
14+
ext: '.txt'
15+
})`);
16+
17+
assert.strictEqual(warnings.length, 0);
18+
assert.ok(dependencies.has("help-me"));
19+
const dependency = dependencies.get("help-me");
20+
21+
assert.deepEqual(
22+
dependency,
23+
{
24+
unsafe: false,
25+
inTry: false,
26+
location: {
27+
end: {
28+
column: 31,
29+
line: 1
30+
},
31+
start: {
32+
column: 13,
33+
line: 1
34+
}
35+
}
36+
}
37+
);
38+
});

test/issues/179-UnsafeEvalRequire.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { runASTAnalysis } from "../../index.js";
99
* @see https://github.com/NodeSecure/js-x-ray/issues/179
1010
*/
1111
// CONSTANTS
12-
const kIncriminedCodeSample = `const stream = eval('require')('stream');`;
12+
const kIncriminedCodeSample = "const stream = eval('require')('stream');";
1313
const kWarningUnsafeImport = "unsafe-import";
1414
const kWarningUnsafeStatement = "unsafe-stmt";
1515

0 commit comments

Comments
 (0)