1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-24 08:09:08 -05:00

fix url parse bug (#3316)

This commit is contained in:
木杉 2019-11-13 02:45:48 +08:00 committed by Ry Dahl
parent 7ba42ee4a6
commit 0f33bf6885
2 changed files with 26 additions and 7 deletions

View file

@ -17,7 +17,7 @@ interface URLParts {
}
const patterns = {
protocol: "(?:([^:/?#]+):)",
protocol: "(?:([a-z]+):)",
authority: "(?://([^/?#]*))",
path: "([^?#]*)",
query: "(\\?[^#]*)",
@ -228,10 +228,13 @@ export class URL {
this.username || this.password
? `${this.username}${this.password ? ":" + this.password : ""}@`
: "";
return `${this.protocol}//${authentication}${this.host}${this.pathname}${
this.search
}${this.hash}`;
let slash = "";
if (this.host || this.protocol === "file:") {
slash = "//";
}
return `${this.protocol}${slash}${authentication}${this.host}${
this.pathname
}${this.search}${this.hash}`;
}
set href(value: string) {
@ -244,7 +247,10 @@ export class URL {
}
get origin(): string {
return `${this.protocol}//${this.host}`;
if (this.host) {
return `${this.protocol}//${this.host}`;
}
return "null";
}
get password(): string {

View file

@ -1,5 +1,5 @@
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
import { test, assert, assertEquals } from "./test_util.ts";
import { test, assert, assertEquals, assertThrows } from "./test_util.ts";
test(function urlParsing(): void {
const url = new URL(
@ -187,3 +187,16 @@ test(function customInspectFunction(): void {
'URL { href: "http://example.com/?", origin: "http://example.com", protocol: "http:", username: "", password: "", host: "example.com", hostname: "example.com", port: "", pathname: "/", hash: "", search: "?" }'
);
});
test(function protocolNotHttpOrFile() {
const url = new URL("about:blank");
assertEquals(url.href, "about:blank");
assertEquals(url.protocol, "about:");
assertEquals(url.origin, "null");
});
test(function createBadUrl(): void {
assertThrows(() => {
new URL("0.0.0.0:8080");
});
});