Permalink
Browse files

url: fix setting `url.search` to the empty string

PR-URL: #11105
Fixes: #11101
Fixes: 98bb65f "url: improving URLSearchParams"
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
  • Loading branch information...
TimothyGu authored and italoacasas committed Feb 1, 2017
1 parent 94555c9 commit 8547871ea2796f3567003bb79f7c9c30f6095897
Showing with 17 additions and 14 deletions.
  1. +13 −14 lib/internal/url.js
  2. +4 −0 test/parallel/test-whatwg-url-searchparams.js
View
@@ -188,12 +188,7 @@ function onParseSearchComplete(flags, protocol, username, password,
if (flags & binding.URL_FLAGS_FAILED)
return;
const ctx = this[context];
- if (query) {
- ctx.query = query;
- ctx.flags |= binding.URL_FLAGS_HAS_QUERY;
- } else {
- ctx.flags &= ~binding.URL_FLAGS_HAS_QUERY;
- }
+ ctx.query = query;
}
function onParseHashComplete(flags, protocol, username, password,
@@ -486,13 +481,15 @@ Object.defineProperties(URL.prototype, {
if (!search) {
ctx.query = null;
ctx.flags &= ~binding.URL_FLAGS_HAS_QUERY;
- this[searchParams][searchParams] = {};
- return;
+ } else {
+ if (search[0] === '?') search = search.slice(1);
+ ctx.query = '';
+ ctx.flags |= binding.URL_FLAGS_HAS_QUERY;
+ if (search) {
+ binding.parse(search, binding.kQuery, null, ctx,
+ onParseSearchComplete.bind(this));
+ }
}
- if (search[0] === '?') search = search.slice(1);
- ctx.query = '';
- binding.parse(search, binding.kQuery, null, ctx,
- onParseSearchComplete.bind(this));
initSearchParams(this[searchParams], search);
}
},
@@ -610,9 +607,11 @@ function update(url, params) {
}
}
-// Reused by the URL parse function invoked by
-// the href setter, and the URLSearchParams constructor
function initSearchParams(url, init) {
+ if (!init) {
+ url[searchParams] = [];
+ return;
+ }
url[searchParams] = getParamsFromObject(querystring.parse(init));
}
@@ -20,6 +20,10 @@ assert(sp.has('a'));
assert.strictEqual(sp.get('a'), '[object Object]');
sp.delete('a');
assert(!sp.has('a'));
+
+m.search = '';
+assert.strictEqual(sp.toString(), '');
+
values.forEach((i) => sp.append('a', i));
assert(sp.has('a'));
assert.strictEqual(sp.getAll('a').length, 6);

0 comments on commit 8547871

Please sign in to comment.