diff --git a/packages/rule-tester/src/RuleTester.ts b/packages/rule-tester/src/RuleTester.ts index c81f7296e189..25f572952719 100644 --- a/packages/rule-tester/src/RuleTester.ts +++ b/packages/rule-tester/src/RuleTester.ts @@ -210,7 +210,7 @@ export class RuleTester extends TestFramework { // file name (`foo.ts`), don't change the base path. if ( filename != null && - (path.isAbsolute(filename) || filename.startsWith('..')) + (path.isAbsolute(filename) || path.normalize(filename).startsWith('..')) ) { basePath = path.parse( path.resolve(basePath ?? process.cwd(), filename), diff --git a/packages/rule-tester/tests/filename.test.ts b/packages/rule-tester/tests/filename.test.ts index 0e9656702e95..8f3442cf670a 100644 --- a/packages/rule-tester/tests/filename.test.ts +++ b/packages/rule-tester/tests/filename.test.ts @@ -57,6 +57,42 @@ describe('rule tester filename', () => { errors: [{ messageId: 'foo' }], filename: '../foo.js', }, + { + name: 'non-normalized relative path starting with ./', + code: '_', + errors: [{ messageId: 'foo' }], + filename: './../../escaped/cwd/file.ts', + }, + { + name: 'non-normalized relative path ./../', + code: '_', + errors: [{ messageId: 'foo' }], + filename: './../foo.js', + }, + { + name: 'non-normalized relative path with multiple ./', + code: '_', + errors: [{ messageId: 'foo' }], + filename: '././../foo.js', + }, + { + name: 'non-normalized path a/../../', + code: '_', + errors: [{ messageId: 'foo' }], + filename: 'a/../../file.ts', + }, + { + name: 'non-normalized path a/b/../c', + code: '_', + errors: [{ messageId: 'foo' }], + filename: 'a/b/../c', + }, + { + name: 'non-normalized path with multiple slashes', + code: '_', + errors: [{ messageId: 'foo' }], + filename: 'a/////////////../../../b', + }, ], valid: [], }); @@ -81,6 +117,42 @@ describe('rule tester filename', () => { errors: [{ messageId: 'foo' }], filename: '../foo.js', }, + { + name: 'non-normalized relative path starting with ./', + code: '_', + errors: [{ messageId: 'foo' }], + filename: './../../escaped/cwd/file.ts', + }, + { + name: 'non-normalized relative path ./../', + code: '_', + errors: [{ messageId: 'foo' }], + filename: './../foo.js', + }, + { + name: 'non-normalized relative path with multiple ./', + code: '_', + errors: [{ messageId: 'foo' }], + filename: '././../foo.js', + }, + { + name: 'non-normalized path a/../../', + code: '_', + errors: [{ messageId: 'foo' }], + filename: 'a/../../file.ts', + }, + { + name: 'non-normalized path a/b/../c', + code: '_', + errors: [{ messageId: 'foo' }], + filename: 'a/b/../c', + }, + { + name: 'non-normalized path with multiple slashes', + code: '_', + errors: [{ messageId: 'foo' }], + filename: 'a/////////////../../../b', + }, ], valid: [], });