diff options
author | Yoshiya Hinosawa <stibium121@gmail.com> | 2020-09-02 03:34:41 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-01 20:34:41 +0200 |
commit | b3563e85691f0a3da97ccc2c96d446730d4c65ac (patch) | |
tree | 4f118549976560f9df77cb6d28176a85fb68b693 | |
parent | fee6f793302394f87ea2958088d14c44b66edae1 (diff) |
fix(URLSearchParams): fix handling of + character (#7314)
-rw-r--r-- | cli/rt/11_url.js | 6 | ||||
-rw-r--r-- | cli/tests/unit/url_search_params_test.ts | 7 |
2 files changed, 12 insertions, 1 deletions
diff --git a/cli/rt/11_url.js b/cli/rt/11_url.js index 5de6cc8c7..86dcbf26d 100644 --- a/cli/rt/11_url.js +++ b/cli/rt/11_url.js @@ -14,6 +14,10 @@ return sendSync("op_domain_to_ascii", { domain, beStrict }); } + function decodeSearchParam(p) { + return decodeURIComponent(p.replace(/\+/g, " ")); + } + const urls = new WeakMap(); class URLSearchParams { @@ -63,7 +67,7 @@ const position = pair.indexOf("="); const name = pair.slice(0, position === -1 ? pair.length : position); const value = pair.slice(name.length + 1); - this.#append(decodeURIComponent(name), decodeURIComponent(value)); + this.#append(decodeSearchParam(name), decodeSearchParam(value)); } }; diff --git a/cli/tests/unit/url_search_params_test.ts b/cli/tests/unit/url_search_params_test.ts index c20db56dd..5e1d2afb5 100644 --- a/cli/tests/unit/url_search_params_test.ts +++ b/cli/tests/unit/url_search_params_test.ts @@ -48,6 +48,13 @@ unitTest(function urlSearchParamsInitString(): void { ); }); +unitTest(function urlSearchParamsInitStringWithPlusCharacter(): void { + const init = "q=a+b"; + const searchParams = new URLSearchParams(init); + assertEquals(searchParams.toString(), init); + assertEquals(searchParams.get("q"), "a b"); +}); + unitTest(function urlSearchParamsInitIterable(): void { const init = [ ["a", "54"], |