From d48b5d9174f309fb8284bb65fd9a8763bffabb25 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 8 Apr 2025 20:12:01 +0200 Subject: [PATCH] JS: Add test for __dirname using copilot and fix a bug --- .../javascript/internal/PathResolution.qll | 2 ++ .../PathResolution/DirnameImports/main.js | 21 +++++++++++++++++++ .../DirnameImports/nested/target.js | 2 ++ .../PathResolution/DirnameImports/target.js | 2 ++ .../PathResolution/test.expected | 6 ++++++ 5 files changed, 33 insertions(+) create mode 100644 javascript/ql/test/library-tests/PathResolution/DirnameImports/main.js create mode 100644 javascript/ql/test/library-tests/PathResolution/DirnameImports/nested/target.js create mode 100644 javascript/ql/test/library-tests/PathResolution/DirnameImports/target.js diff --git a/javascript/ql/lib/semmle/javascript/internal/PathResolution.qll b/javascript/ql/lib/semmle/javascript/internal/PathResolution.qll index 785d4276e38..41214d120f0 100644 --- a/javascript/ql/lib/semmle/javascript/internal/PathResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/PathResolution.qll @@ -105,6 +105,8 @@ module PathResolution { expr = dirname() or prefixedByDirname(expr.(AddExpr).getLeftOperand()) + or + prefixedByDirname(expr.(CallExpr).getArgument(0)) } // diff --git a/javascript/ql/test/library-tests/PathResolution/DirnameImports/main.js b/javascript/ql/test/library-tests/PathResolution/DirnameImports/main.js new file mode 100644 index 00000000000..083f953bfb5 --- /dev/null +++ b/javascript/ql/test/library-tests/PathResolution/DirnameImports/main.js @@ -0,0 +1,21 @@ +// Test for imports using __dirname +const path = require('path'); + +// Using __dirname directly +const direct = require(__dirname + '/target.js'); // $ importTarget=DirnameImports/target.js + +// Using __dirname with path.join +const withPathJoin = require(path.join(__dirname, 'target.js')); // $ importTarget=DirnameImports/target.js + +// Using __dirname with nested path +const nested = require(__dirname + '/nested/target.js'); // $ importTarget=DirnameImports/nested/target.js + +// Using __dirname with parent directory +const parent = require(__dirname + '/../import-packages.ts'); // $ importTarget=import-packages.ts + +// Using __dirname with path concat and variable +const subdir = 'nested'; +const dynamic = require(__dirname + '/' + subdir + '/target.js'); // $ importTarget=DirnameImports/nested/target.js + +// Using __dirname in an AddExpr chain +const chainedAdd = require(__dirname + '/' + 'target.js'); // $ importTarget=DirnameImports/target.js diff --git a/javascript/ql/test/library-tests/PathResolution/DirnameImports/nested/target.js b/javascript/ql/test/library-tests/PathResolution/DirnameImports/nested/target.js new file mode 100644 index 00000000000..329f6242a40 --- /dev/null +++ b/javascript/ql/test/library-tests/PathResolution/DirnameImports/nested/target.js @@ -0,0 +1,2 @@ +// Nested target file for __dirname imports +module.exports = { name: 'nested-target' }; diff --git a/javascript/ql/test/library-tests/PathResolution/DirnameImports/target.js b/javascript/ql/test/library-tests/PathResolution/DirnameImports/target.js new file mode 100644 index 00000000000..bb9a3de9202 --- /dev/null +++ b/javascript/ql/test/library-tests/PathResolution/DirnameImports/target.js @@ -0,0 +1,2 @@ +// Target file for __dirname imports +module.exports = { name: 'target' }; diff --git a/javascript/ql/test/library-tests/PathResolution/test.expected b/javascript/ql/test/library-tests/PathResolution/test.expected index cede955097d..bc45899e0e0 100644 --- a/javascript/ql/test/library-tests/PathResolution/test.expected +++ b/javascript/ql/test/library-tests/PathResolution/test.expected @@ -24,6 +24,12 @@ | Basic/Subdir/sub.ts:3:1:3:14 | import './..'; | Basic/index.ts | | Basic/Subdir/sub.ts:4:1:4:15 | import './../'; | Basic/index.ts | | Basic/index.ts:1:1:1:22 | import ... r/sub'; | Basic/Subdir/sub.ts | +| DirnameImports/main.js:5:16:5:48 | require ... et.js') | DirnameImports/target.js | +| DirnameImports/main.js:8:22:8:63 | require ... t.js')) | DirnameImports/target.js | +| DirnameImports/main.js:11:16:11:55 | require ... et.js') | DirnameImports/nested/target.js | +| DirnameImports/main.js:14:16:14:60 | require ... es.ts') | import-packages.ts | +| DirnameImports/main.js:18:17:18:64 | require ... et.js') | DirnameImports/nested/target.js | +| DirnameImports/main.js:21:20:21:57 | require ... et.js') | DirnameImports/target.js | | Extended/src/main.ts:2:1:2:21 | import ... /file"; | Extended/lib/file.ts | | Extended/src/main.ts:3:1:3:24 | import ... le.ts"; | Extended/lib/file.ts | | Extended/src/main.ts:4:1:4:24 | import ... le.js"; | Extended/lib/file.ts |