diff --git a/lib/internal/url.js b/lib/internal/url.js index 0fe819fe129..2d1339702b9 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -1022,8 +1022,9 @@ class URL { } set href(value) { + const context = this.#context; value = `${value}`; - const href = bindingUrl.update(this.#context.href, updateActions.kHref, value); + const href = bindingUrl.update(context.href, updateActions.kHref, value); if (!href) { throw new ERR_INVALID_URL(value); } this.#updateContext(href, true); } diff --git a/test/parallel/test-whatwg-url-custom-href-side-effect.js b/test/parallel/test-whatwg-url-custom-href-side-effect.js index 30967d9feae..daecb2a2226 100644 --- a/test/parallel/test-whatwg-url-custom-href-side-effect.js +++ b/test/parallel/test-whatwg-url-custom-href-side-effect.js @@ -13,3 +13,19 @@ assert.throws(() => { }); assert.deepStrictEqual(url, ref); + +const setHref = Object.getOwnPropertyDescriptor(URL.prototype, 'href').set; +let calls = 0; + +assert.throws(() => { + setHref.call({}, { + toString() { + calls++; + return 'https://example.com/'; + }, + }); +}, { + name: 'TypeError', +}); + +assert.strictEqual(calls, 0);