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.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'
},
};
|