From d93ab92f69805c14de2168129f18e2e782235d59 Mon Sep 17 00:00:00 2001 From: chris380 Date: Wed, 13 Apr 2022 16:07:41 +0200 Subject: [PATCH] Reject cd to invalid folders --- src/Terminal/DirectoryServerHelpers.ts | 11 +++++++++++ src/Terminal/commands/cd.ts | 6 ++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Terminal/DirectoryServerHelpers.ts b/src/Terminal/DirectoryServerHelpers.ts index f5b8027e1..8dccbf6e2 100644 --- a/src/Terminal/DirectoryServerHelpers.ts +++ b/src/Terminal/DirectoryServerHelpers.ts @@ -51,3 +51,14 @@ export function getSubdirectories(serv: BaseServer, dir: string): string[] { return res; } + +/** + * Returns true, if the server's directory itself or one of its subdirectory contains files. + */ +export function containsFiles(server: BaseServer, dir: string): boolean { + const dirWithTrailingSlash = dir + (dir.slice(-1) === "/" ? "" : "/"); + + return [...server.scripts.map((s) => s.filename), ...server.textFiles.map((t) => t.fn)].some((filename) => + filename.startsWith(dirWithTrailingSlash), + ); +} diff --git a/src/Terminal/commands/cd.ts b/src/Terminal/commands/cd.ts index 9603063df..ac1c63fa3 100644 --- a/src/Terminal/commands/cd.ts +++ b/src/Terminal/commands/cd.ts @@ -4,6 +4,7 @@ import { IPlayer } from "../../PersonObjects/IPlayer"; import { BaseServer } from "../../Server/BaseServer"; import { evaluateDirectoryPath, removeTrailingSlash } from "../DirectoryHelpers"; +import { containsFiles } from "../DirectoryServerHelpers"; export function cd( terminal: ITerminal, @@ -31,10 +32,7 @@ export function cd( } const server = player.getCurrentServer(); - if ( - !server.scripts.some((script) => script.filename.startsWith(evaledDir + "")) && - !server.textFiles.some((file) => file.fn.startsWith(evaledDir + "")) - ) { + if (!containsFiles(server, evaledDir)) { terminal.error("Invalid path. Failed to change directories"); return; }