Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
lib: remove usage of url.parse
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
@@ -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()` ][],
@@ -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
@@ -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
@@ -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 ) ;
Oops, something went wrong.
Retry
@@ -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 : {
Toggle all file notes
Toggle all file annotations