Skip to content

Commit dcb991b

Browse files
authored
fix(SourceFile): ignore try/finally statements for inTryStatement (#313)
1 parent e208aba commit dcb991b

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

Diff for: eslint.config.mjs

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ export default [
44
{
55
ignores: [
66
"**/test/fixtures/**/*",
7-
"**/test/probes/fixtures/**/*.js"
7+
"**/test/probes/fixtures/**/*.js",
8+
"**/examples/*.js"
89
]
910
},
1011
...ESLintConfig,

Diff for: src/SourceFile.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ export class SourceFile {
129129
this.deobfuscator.walk(node);
130130

131131
// Detect TryStatement and CatchClause to known which dependency is required in a Try {} clause
132-
if (node.type === "TryStatement" && typeof node.handler !== "undefined") {
132+
if (node.type === "TryStatement" && node.handler) {
133133
this.inTryStatement = true;
134134
}
135135
else if (node.type === "CatchClause") {

Diff for: test/issues/312-try-finally.spec.js

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Import Node.js Dependencies
2+
import { test } from "node:test";
3+
import assert from "node:assert";
4+
5+
// Import Internal Dependencies
6+
import { AstAnalyser } from "../../index.js";
7+
8+
/**
9+
* @see https://github.com/NodeSecure/js-x-ray/issues/312
10+
*/
11+
test("SourceFile inTryStatement must ignore try/finally statements", () => {
12+
const { dependencies } = new AstAnalyser().analyse(`
13+
try {
14+
// do something
15+
}
16+
finally {
17+
18+
}
19+
20+
var import_ts = __toESM(require("foobar"), 1);
21+
`);
22+
assert.strictEqual(dependencies.size, 1);
23+
assert.ok(dependencies.has("foobar"));
24+
25+
const dependency = dependencies.get("foobar");
26+
assert.strictEqual(dependency.unsafe, false);
27+
assert.strictEqual(dependency.inTry, false);
28+
});

0 commit comments

Comments
 (0)