Skip to content

Commit

Permalink
lib: remove usage of url.parse
Browse files Browse the repository at this point in the history
Since url.parse() is deprecated, it must not be used inside Node.js.

PR-URL: #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>
  • Loading branch information
RaisinTen committed Feb 11, 2021
1 parent ad38be4 commit 295e766
Show file tree
Hide file tree
Showing 6 changed files with 7 additions and 99 deletions.
5 changes: 4 additions & 1 deletion doc/api/deprecations.md
Original file line number Diff line number Diff line change
Expand Up @@ -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()`][],
Expand Down
18 changes: 1 addition & 17 deletions lib/_http_client.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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
Expand Down
18 changes: 1 addition & 17 deletions lib/https.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand Down
18 changes: 1 addition & 17 deletions lib/tls.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down Expand Up @@ -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;
Expand All @@ -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);
Expand Down
33 changes: 0 additions & 33 deletions test/parallel/test-http-deprecated-urls.js

This file was deleted.

14 changes: 0 additions & 14 deletions test/parallel/test-tls-check-server-identity.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.
{
Expand Down Expand Up @@ -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: {
Expand Down

0 comments on commit 295e766

Please sign in to comment.