const result = args.map(arg => { let pathCandidate = String(arg); let parsedPath: IPathWithLineAndColumn | undefined = undefined; if (gotoLineMode) { parsedPath = parseLineAndColumnAware(pathCandidate); pathCandidate = parsedPath.path; } if (pathCandidate) { pathCandidate = preparePath(cwd, pathCandidate); } const sanitizedFilePath = sanitizeFilePath(pathCandidate, cwd); const basename = path.basename(sanitizedFilePath); if (basename /* can be empty if code is opened on root */ && !extpath.isValidBasename(basename)) { return null; // do not allow invalid file names } if (gotoLineMode && parsedPath) { parsedPath.path = sanitizedFilePath; return toPath(parsedPath); } return sanitizedFilePath; });
test('isValidBasename', () => { assert.ok(!extpath.isValidBasename(null)); assert.ok(!extpath.isValidBasename('')); assert.ok(extpath.isValidBasename('test.txt')); assert.ok(!extpath.isValidBasename('/test.txt')); assert.ok(!extpath.isValidBasename('\\test.txt')); if (platform.isWindows) { assert.ok(!extpath.isValidBasename('aux')); assert.ok(!extpath.isValidBasename('Aux')); assert.ok(!extpath.isValidBasename('LPT0')); assert.ok(!extpath.isValidBasename('test.txt.')); assert.ok(!extpath.isValidBasename('test.txt..')); assert.ok(!extpath.isValidBasename('test.txt ')); assert.ok(!extpath.isValidBasename('test.txt\t')); assert.ok(!extpath.isValidBasename('tes:t.txt')); assert.ok(!extpath.isValidBasename('tes"t.txt')); } });