From 233ed4f113f737e274b4a91e9b08e7310ef21e91 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 7 Apr 2025 06:51:42 +0200 Subject: [PATCH] Handle '..' path --- .../ql/lib/semmle/javascript/internal/PathResolution.qll | 2 +- .../ql/test/library-tests/PathResolution/Basic/Subdir/sub.ts | 4 ++++ .../ql/test/library-tests/PathResolution/Basic/index.ts | 1 + .../ql/test/library-tests/PathResolution/test.expected | 5 +++++ 4 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 javascript/ql/test/library-tests/PathResolution/Basic/Subdir/sub.ts create mode 100644 javascript/ql/test/library-tests/PathResolution/Basic/index.ts diff --git a/javascript/ql/lib/semmle/javascript/internal/PathResolution.qll b/javascript/ql/lib/semmle/javascript/internal/PathResolution.qll index 985d877a6ac..a933143b88f 100644 --- a/javascript/ql/lib/semmle/javascript/internal/PathResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/PathResolution.qll @@ -171,7 +171,7 @@ module PathResolution { private module TSConfigResolve = ResolvePaths; bindingset[path] - private predicate isRelativePath(string path) { path.regexpMatch("\\.\\.?[/\\\\].*") } + private predicate isRelativePath(string path) { path.regexpMatch("\\.\\.?(?:[/\\\\].*)?") } private module ResolvePathMappingConfig implements ResolvePathsSig { additional predicate shouldResolve(TSConfig cfg, Container base, string path) { diff --git a/javascript/ql/test/library-tests/PathResolution/Basic/Subdir/sub.ts b/javascript/ql/test/library-tests/PathResolution/Basic/Subdir/sub.ts new file mode 100644 index 00000000000..375c5f95537 --- /dev/null +++ b/javascript/ql/test/library-tests/PathResolution/Basic/Subdir/sub.ts @@ -0,0 +1,4 @@ +import '..'; // $ importTarget=Basic/index.ts +import '../'; // $ importTarget=Basic/index.ts +import './..'; // $ importTarget=Basic/index.ts +import './../'; // $ importTarget=Basic/index.ts diff --git a/javascript/ql/test/library-tests/PathResolution/Basic/index.ts b/javascript/ql/test/library-tests/PathResolution/Basic/index.ts new file mode 100644 index 00000000000..1d8ed2b606a --- /dev/null +++ b/javascript/ql/test/library-tests/PathResolution/Basic/index.ts @@ -0,0 +1 @@ +import './Subdir/sub'; // $ importTarget=Basic/Subdir/sub.ts diff --git a/javascript/ql/test/library-tests/PathResolution/test.expected b/javascript/ql/test/library-tests/PathResolution/test.expected index 28a8bdbe74d..20c75dddc9a 100644 --- a/javascript/ql/test/library-tests/PathResolution/test.expected +++ b/javascript/ql/test/library-tests/PathResolution/test.expected @@ -18,6 +18,11 @@ | BaseUrl/src/main.ts:24:1:24:17 | import "@/index"; | BaseUrl/lib/index.ts | | BaseUrl/src/main.ts:25:1:25:20 | import "@/index.ts"; | BaseUrl/lib/index.ts | | BaseUrl/src/main.ts:26:1:26:20 | import "@/index.js"; | BaseUrl/lib/index.ts | +| Basic/Subdir/sub.ts:1:1:1:12 | import '..'; | Basic/index.ts | +| Basic/Subdir/sub.ts:2:1:2:13 | import '../'; | Basic/index.ts | +| 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 | | 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 |