diff --git a/CHANGELOG.md b/CHANGELOG.md index baa37a6a6e4d17..bc47e6bf3dff6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,7 +33,8 @@ release. -17.7.0
+17.7.1
+17.7.0
17.6.0
17.5.0
17.4.0
diff --git a/doc/changelogs/CHANGELOG_V17.md b/doc/changelogs/CHANGELOG_V17.md index a0d26d64a25990..142fe3b5c3534c 100644 --- a/doc/changelogs/CHANGELOG_V17.md +++ b/doc/changelogs/CHANGELOG_V17.md @@ -8,6 +8,7 @@ +17.7.1
17.7.0
17.6.0
17.5.0
@@ -41,6 +42,22 @@ * [io.js](CHANGELOG_IOJS.md) * [Archive](CHANGELOG_ARCHIVE.md) + + +## 2022-03-10, Version 17.7.1 (Current), @BethGriggs prepared by @sxa + +### Notable Changes + +#### Fixed regression in url.resolve() + +This release fixes an issue introduced in Node.js v17.7.0 with some URLs +that contain `@`. This issue affected yarn 1. This version reverts the +change that introduced the regression. + +### Commits + +* \[[`96a9e00fb3`](https://github.com/nodejs/node/commit/96a9e00fb3)] - **url**: revert fix url.parse() for `@hostname` (Antoine du Hamel) [#42280](https://github.com/nodejs/node/pull/42280) + ## 2022-03-09, Version 17.7.0 (Current), @BethGriggs prepared by @sxa diff --git a/lib/url.js b/lib/url.js index 63d24bef7bf0bd..745c7c9930deda 100644 --- a/lib/url.js +++ b/lib/url.js @@ -294,29 +294,22 @@ Url.prototype.parse = function parse(url, parseQueryString, slashesDenoteHost) { rest = rest.slice(proto.length); } - // Figure out if it's got a host. - // user@server is *always* interpreted as a hostname, and URL + // Figure out if it's got a host + // user@server is *always* interpreted as a hostname, and url // resolution will treat //foo/bar as host=foo,path=bar because that's - // how the browser resolves relative URLs. http:@example.com is treated - // the same as http://example.com. + // how the browser resolves relative URLs. let slashes; - let at; if (slashesDenoteHost || proto || hostPattern.test(rest)) { slashes = rest.charCodeAt(0) === CHAR_FORWARD_SLASH && - rest.charCodeAt(1) === CHAR_FORWARD_SLASH; - at = rest.charCodeAt(0) === CHAR_AT; - if (!(proto && hostlessProtocol.has(lowerProto))) { - if (slashes) { - rest = rest.slice(2); - this.slashes = true; - } else if (at) { - rest = rest.slice(1); - } + rest.charCodeAt(1) === CHAR_FORWARD_SLASH; + if (slashes && !(proto && hostlessProtocol.has(lowerProto))) { + rest = rest.slice(2); + this.slashes = true; } } if (!hostlessProtocol.has(lowerProto) && - (slashes || at || (proto && !slashedProtocol.has(proto)))) { + (slashes || (proto && !slashedProtocol.has(proto)))) { // there's a hostname. // the first instance of /, ?, ;, or # ends the host. diff --git a/src/node_version.h b/src/node_version.h index 8910c33e9deed4..2521a037f7335d 100644 --- a/src/node_version.h +++ b/src/node_version.h @@ -29,7 +29,7 @@ #define NODE_VERSION_IS_LTS 0 #define NODE_VERSION_LTS_CODENAME "" -#define NODE_VERSION_IS_RELEASE 0 +#define NODE_VERSION_IS_RELEASE 1 #ifndef NODE_STRINGIFY #define NODE_STRINGIFY(n) NODE_STRINGIFY_HELPER(n) diff --git a/test/parallel/test-url-parse-format.js b/test/parallel/test-url-parse-format.js index a4bb141b49bfc7..e1cf80a2778abd 100644 --- a/test/parallel/test-url-parse-format.js +++ b/test/parallel/test-url-parse-format.js @@ -975,22 +975,7 @@ const parseTests = { query: null, pathname: '/everybody', path: '/everybody', - href: '//fhqwhgads@example.com/everybody#to-the-limit', - }, - - 'http:@localhost': { - protocol: 'http:', - slashes: null, - auth: null, - host: 'localhost', - port: null, - hostname: 'localhost', - hash: null, - search: null, - query: null, - pathname: '/', - path: '/', - href: 'http://localhost/', + href: '//fhqwhgads@example.com/everybody#to-the-limit' }, };