Skip to content

Commit

Permalink
url: fix setting url.search to the empty string
Browse files Browse the repository at this point in the history
PR-URL: nodejs#11105
Fixes: nodejs#11101
Fixes: 98bb65f "url: improving URLSearchParams"
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Michaël Zasso <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
  • Loading branch information
TimothyGu authored and italoacasas committed Feb 4, 2017
1 parent cf55e12 commit 0e121f9
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 14 deletions.
27 changes: 13 additions & 14 deletions lib/internal/url.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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);
}
},
Expand Down Expand Up @@ -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));
}

Expand Down
4 changes: 4 additions & 0 deletions test/parallel/test-whatwg-url-searchparams.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,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);
Expand Down

0 comments on commit 0e121f9

Please sign in to comment.