Merge pull request #3428 from Chris380/bugfix/2367_reject_cd_to_invalid_folders

Reject cd to invalid folders
This commit is contained in:
hydroflame
2022-04-13 11:27:35 -04:00
committed by GitHub
2 changed files with 13 additions and 4 deletions

View File

@@ -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),
);
}

View File

@@ -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;
}