0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 09:31:22 -05:00

fix(cli): strings shouldn't be interpreted as file URLs (#6412)

This commit is contained in:
Casper Beyer 2020-06-26 20:29:34 +08:00 committed by GitHub
parent 70463bac7d
commit 175867ab76
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 14 deletions

View file

@ -110,14 +110,9 @@ function pathFromURLPosix(url: URL): string {
}
export function pathFromURL(pathOrUrl: string | URL): string {
if (typeof pathOrUrl == "string") {
try {
pathOrUrl = new URL(pathOrUrl);
} catch {}
}
if (pathOrUrl instanceof URL) {
if (pathOrUrl.protocol != "file:") {
throw new TypeError("Must be a path string or file URL.");
throw new TypeError("Must be a file URL.");
}
return build.os == "windows"

View file

@ -6,20 +6,27 @@ const { pathFromURL } = Deno[Deno.internal];
unitTest(
{ ignore: Deno.build.os === "windows" },
function pathFromURLPosix(): void {
assertEquals(pathFromURL("file:///test/directory"), "/test/directory");
assertEquals(pathFromURL("file:///space_ .txt"), "/space_ .txt");
assertThrows(() => pathFromURL("file://host/test/directory"));
assertThrows(() => pathFromURL("https://deno.land/welcome.ts"));
assertEquals(
pathFromURL(new URL("file:///test/directory")),
"/test/directory"
);
assertEquals(pathFromURL(new URL("file:///space_ .txt")), "/space_ .txt");
assertThrows(() => pathFromURL(new URL("https://deno.land/welcome.ts")));
}
);
unitTest(
{ ignore: Deno.build.os !== "windows" },
function pathFromURLWin32(): void {
assertEquals(pathFromURL("file:///c:/windows/test"), "c:\\windows\\test");
assertEquals(pathFromURL("file:///c:/space_ .txt"), "c:\\space_ .txt");
assertThrows(() => pathFromURL("file:///thing/test"));
assertThrows(() => pathFromURL("https://deno.land/welcome.ts"));
assertEquals(
pathFromURL(new URL("file:///c:/windows/test")),
"c:\\windows\\test"
);
assertEquals(
pathFromURL(new URL("file:///c:/space_ .txt")),
"c:\\space_ .txt"
);
assertThrows(() => pathFromURL(new URL("https://deno.land/welcome.ts")));
/* TODO(ry) Add tests for these situations
* ampersand_&.tx file:///D:/weird_names/ampersand_&.txt
* at_@.txt file:///D:/weird_names/at_@.txt