Skip to content

Commit b465cd0

Browse files
committed
url: fix URL query update if searchParams changes
If searchParams becomes empty, query must be set to null. Add missing update of context flags. Fixes: nodejs#10480 PR-URL: nodejs#10486 Reviewed-By: James M Snell <[email protected]>
1 parent db18dd8 commit b465cd0

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

lib/internal/url.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,15 @@ function update(url, params) {
593593
if (!url)
594594
return;
595595

596-
url[context].query = params.toString();
596+
const ctx = url[context];
597+
const serializedParams = params.toString();
598+
if (serializedParams) {
599+
ctx.query = serializedParams;
600+
ctx.flags |= binding.URL_FLAGS_HAS_QUERY;
601+
} else {
602+
ctx.query = null;
603+
ctx.flags &= ~binding.URL_FLAGS_HAS_QUERY;
604+
}
597605
}
598606

599607
function getSearchParamPairs(target) {

test/parallel/test-whatwg-url-searchparams-delete.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,15 @@ params.append('first', 10);
4242
params.delete('first');
4343
assert.strictEqual(false, params.has('first'),
4444
'Search params object has no "first" name');
45+
46+
// https://github.com/nodejs/node/issues/10480
47+
// Emptying searchParams should correctly update url's query
48+
{
49+
const url = new URL('http://domain?var=1&var=2&var=3');
50+
for (const param of url.searchParams.keys()) {
51+
url.searchParams.delete(param);
52+
}
53+
assert.strictEqual(url.searchParams.toString(), '');
54+
assert.strictEqual(url.search, '');
55+
assert.strictEqual(url.href, 'http://domain/');
56+
}

0 commit comments

Comments
 (0)