diff options
author | raisinten <raisinten@gmail.com> | 2021-01-09 18:17:43 +0530 |
---|---|---|
committer | Darshan Sen <raisinten@gmail.com> | 2021-02-11 19:30:28 +0530 |
commit | 295e766c2782d6d83e33004f7c2204c0a8d52655 (patch) | |
tree | caf632e86ee063d4cabb97b6979945e060f460a9 | |
parent | ad38be4f6ab38c7974b9014564af6de1b94dfb36 (diff) | |
download | node-new-295e766c2782d6d83e33004f7c2204c0a8d52655.tar.gz |
lib: remove usage of url.parse
Since url.parse() is deprecated, it must not be used inside Node.js.
PR-URL: https://github.com/nodejs/node/pull/36853
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Beth Griggs <bgriggs@redhat.com>
Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com>
-rw-r--r-- | doc/api/deprecations.md | 5 | ||||
-rw-r--r-- | lib/_http_client.js | 18 | ||||
-rw-r--r-- | lib/https.js | 18 | ||||
-rw-r--r-- | lib/tls.js | 18 | ||||
-rw-r--r-- | test/parallel/test-http-deprecated-urls.js | 33 | ||||
-rw-r--r-- | test/parallel/test-tls-check-server-identity.js | 14 |
6 files changed, 7 insertions, 99 deletions
diff --git a/doc/api/deprecations.md b/doc/api/deprecations.md index b337441c3a..12cbb55d01 100644 --- a/doc/api/deprecations.md +++ b/doc/api/deprecations.md @@ -2051,12 +2051,15 @@ expose values under these names. ### DEP0109: `http`, `https`, and `tls` support for invalid URLs <!-- YAML changes: + - version: REPLACEME + pr-url: https://github.com/nodejs/node/pull/36853 + description: End-of-Life. - version: v11.0.0 pr-url: https://github.com/nodejs/node/pull/20270 description: Runtime deprecation. --> -Type: Runtime +Type: End-of-Life Some previously supported (but strictly invalid) URLs were accepted through the [`http.request()`][], [`http.get()`][], [`https.request()`][], diff --git a/lib/_http_client.js b/lib/_http_client.js index 930888863e..842a33a41f 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -42,7 +42,6 @@ const { } = primordials; const net = require('net'); -const url = require('url'); const assert = require('internal/assert'); const { once } = require('internal/util'); const { @@ -98,27 +97,12 @@ class HTTPClientAsyncResource { } } -let urlWarningEmitted = false; function ClientRequest(input, options, cb) { FunctionPrototypeCall(OutgoingMessage, this); if (typeof input === 'string') { const urlStr = input; - try { - input = urlToHttpOptions(new URL(urlStr)); - } catch (err) { - input = url.parse(urlStr); - if (!input.hostname) { - throw err; - } - if (!urlWarningEmitted && !process.noDeprecation) { - urlWarningEmitted = true; - process.emitWarning( - `The provided URL ${urlStr} is not a valid URL, and is supported ` + - 'in the http module solely for compatibility.', - 'DeprecationWarning', 'DEP0109'); - } - } + input = urlToHttpOptions(new URL(urlStr)); } else if (input && input[searchParamsSymbol] && input[searchParamsSymbol][searchParamsSymbol]) { // url.URL instance diff --git a/lib/https.js b/lib/https.js index 79ac6c6bd5..080efe40fa 100644 --- a/lib/https.js +++ b/lib/https.js @@ -37,7 +37,6 @@ const { require('internal/util').assertCrypto(); const tls = require('tls'); -const url = require('url'); const { Agent: HttpAgent } = require('_http_agent'); const { Server: HttpServer, @@ -296,27 +295,12 @@ Agent.prototype._evictSession = function _evictSession(key) { const globalAgent = new Agent(); -let urlWarningEmitted = false; function request(...args) { let options = {}; if (typeof args[0] === 'string') { const urlStr = ArrayPrototypeShift(args); - try { - options = urlToHttpOptions(new URL(urlStr)); - } catch (err) { - options = url.parse(urlStr); - if (!options.hostname) { - throw err; - } - if (!urlWarningEmitted && !process.noDeprecation) { - urlWarningEmitted = true; - process.emitWarning( - `The provided URL ${urlStr} is not a valid URL, and is supported ` + - 'in the https module solely for compatibility.', - 'DeprecationWarning', 'DEP0109'); - } - } + options = urlToHttpOptions(new URL(urlStr)); } else if (args[0] && args[0][searchParamsSymbol] && args[0][searchParamsSymbol][searchParamsSymbol]) { // url.URL instance diff --git a/lib/tls.js b/lib/tls.js index 49c7d24517..eae34a4239 100644 --- a/lib/tls.js +++ b/lib/tls.js @@ -55,7 +55,6 @@ const { isArrayBufferView } = require('internal/util/types'); const net = require('net'); const { getOptionValue } = require('internal/options'); -const url = require('url'); const { getRootCertificates, getSSLCiphers } = internalBinding('crypto'); const { Buffer } = require('buffer'); const EventEmitter = require('events'); @@ -230,7 +229,6 @@ function check(hostParts, pattern, wildcards) { return true; } -let urlWarningEmitted = false; exports.checkServerIdentity = function checkServerIdentity(hostname, cert) { const subject = cert.subject; const altNames = cert.subjectaltname; @@ -246,21 +244,7 @@ exports.checkServerIdentity = function checkServerIdentity(hostname, cert) { if (StringPrototypeStartsWith(name, 'DNS:')) { ArrayPrototypePush(dnsNames, StringPrototypeSlice(name, 4)); } else if (StringPrototypeStartsWith(name, 'URI:')) { - let uri; - try { - uri = new URL(StringPrototypeSlice(name, 4)); - } catch { - const slicedName = StringPrototypeSlice(name, 4); - uri = url.parse(slicedName); - if (!urlWarningEmitted && !process.noDeprecation) { - urlWarningEmitted = true; - process.emitWarning( - `The URI ${slicedName} found in cert.subjectaltname ` + - 'is not a valid URI, and is supported in the tls module ' + - 'solely for compatibility.', - 'DeprecationWarning', 'DEP0109'); - } - } + const uri = new URL(StringPrototypeSlice(name, 4)); // TODO(bnoordhuis) Also use scheme. ArrayPrototypePush(uriNames, uri.hostname); diff --git a/test/parallel/test-http-deprecated-urls.js b/test/parallel/test-http-deprecated-urls.js deleted file mode 100644 index 5bb9f66ebe..0000000000 --- a/test/parallel/test-http-deprecated-urls.js +++ /dev/null @@ -1,33 +0,0 @@ -/* eslint-disable node-core/crypto-check */ - -'use strict'; - -const common = require('../common'); - -const http = require('http'); -const modules = { http }; - -const deprecations = [ - ['The provided URL http://[www.nodejs.org] is not a valid URL, and is supported ' + - 'in the http module solely for compatibility.', - 'DEP0109'], -]; - -if (common.hasCrypto) { - const https = require('https'); - modules.https = https; - deprecations.push( - ['The provided URL https://[www.nodejs.org] is not a valid URL, and is supported ' + - 'in the https module solely for compatibility.', - 'DEP0109'], - ); -} - -common.expectWarning('DeprecationWarning', deprecations); - -Object.keys(modules).forEach((module) => { - const doNotCall = common.mustNotCall( - `${module}.request should not connect to ${module}://[www.nodejs.org]` - ); - modules[module].request(`${module}://[www.nodejs.org]`, doNotCall).abort(); -}); diff --git a/test/parallel/test-tls-check-server-identity.js b/test/parallel/test-tls-check-server-identity.js index deeeecdec9..ad79d93a3d 100644 --- a/test/parallel/test-tls-check-server-identity.js +++ b/test/parallel/test-tls-check-server-identity.js @@ -30,13 +30,6 @@ const util = require('util'); const tls = require('tls'); -common.expectWarning('DeprecationWarning', [ - ['The URI http://[a.b.a.com]/ found in cert.subjectaltname ' + - 'is not a valid URI, and is supported in the tls module ' + - 'solely for compatibility.', - 'DEP0109'], -]); - const tests = [ // False-y values. { @@ -282,13 +275,6 @@ const tests = [ error: 'Host: a.b.a.com. is not in the cert\'s altnames: ' + 'URI:http://*.b.a.com/' }, - // Invalid URI - { - host: 'a.b.a.com', cert: { - subjectaltname: 'URI:http://[a.b.a.com]/', - subject: {} - } - }, // IP addresses { host: 'a.b.a.com', cert: { |