diff options
author | cjihrig <cjihrig@gmail.com> | 2018-03-17 12:43:50 -0400 |
---|---|---|
committer | cjihrig <cjihrig@gmail.com> | 2018-03-19 14:49:34 -0400 |
commit | 7c73cd4c70513dd4fa1f7ea13e3bb3270696eabe (patch) | |
tree | 4f8cd1c56d3370139a4e08c6810bade79edb22b5 | |
parent | 0fb017d684448308bb78d43f2c32e0b15d1c8241 (diff) | |
download | node-new-7c73cd4c70513dd4fa1f7ea13e3bb3270696eabe.tar.gz |
net: emit error on invalid address family
This commit adds proper error handling to net.connect() when
a custom lookup() function returns an invalid address family.
PR-URL: https://github.com/nodejs/node/pull/19415
Fixes: https://github.com/nodejs/node/issues/19407
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Khaidi Chu <i@2333.moe>
Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r-- | doc/api/errors.md | 5 | ||||
-rw-r--r-- | lib/internal/errors.js | 1 | ||||
-rw-r--r-- | lib/net.js | 7 | ||||
-rw-r--r-- | test/parallel/test-net-options-lookup.js | 11 |
4 files changed, 23 insertions, 1 deletions
diff --git a/doc/api/errors.md b/doc/api/errors.md index 5c38dde413..5e94535a3e 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -1042,6 +1042,11 @@ The `inspector` module is not available for use. While using the `inspector` module, an attempt was made to use the inspector before it was connected. +<a id="ERR_INVALID_ADDRESS_FAMILY"></a> +### ERR_INVALID_ADDRESS_FAMILY + +The provided address family is not understood by the Node.js API. + <a id="ERR_INVALID_ARG_TYPE"></a> ### ERR_INVALID_ARG_TYPE diff --git a/lib/internal/errors.js b/lib/internal/errors.js index d5260bd501..33a3185f79 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -737,6 +737,7 @@ E('ERR_INSPECTOR_ALREADY_CONNECTED', E('ERR_INSPECTOR_CLOSED', 'Session was closed', Error); E('ERR_INSPECTOR_NOT_AVAILABLE', 'Inspector is not available', Error); E('ERR_INSPECTOR_NOT_CONNECTED', 'Session is not connected', Error); +E('ERR_INVALID_ADDRESS_FAMILY', 'Invalid address family: %s', RangeError); E('ERR_INVALID_ARG_TYPE', invalidArgType, TypeError); E('ERR_INVALID_ARG_VALUE', (name, value, reason = 'is invalid') => { const util = lazyUtil(); diff --git a/lib/net.js b/lib/net.js index 19f5b13589..466531744e 100644 --- a/lib/net.js +++ b/lib/net.js @@ -54,6 +54,7 @@ const { } = require('internal/async_hooks'); const errors = require('internal/errors'); const { + ERR_INVALID_ADDRESS_FAMILY, ERR_INVALID_ARG_TYPE, ERR_INVALID_FD_TYPE, ERR_INVALID_IP_ADDRESS, @@ -1117,6 +1118,12 @@ function lookupAndConnect(self, options) { err.port = options.port; err.message = err.message + ' ' + options.host + ':' + options.port; process.nextTick(connectErrorNT, self, err); + } else if (addressType !== 4 && addressType !== 6) { + err = new ERR_INVALID_ADDRESS_FAMILY(addressType); + err.host = options.host; + err.port = options.port; + err.message = err.message + ' ' + options.host + ':' + options.port; + process.nextTick(connectErrorNT, self, err); } else { self._unrefTimer(); defaultTriggerAsyncIdScope( diff --git a/test/parallel/test-net-options-lookup.js b/test/parallel/test-net-options-lookup.js index 0b4e18f12f..007be66f45 100644 --- a/test/parallel/test-net-options-lookup.js +++ b/test/parallel/test-net-options-lookup.js @@ -29,5 +29,14 @@ function connectDoesNotThrow(input) { lookup: input }; - net.connect(opts); + return net.connect(opts); +} + +{ + // Verify that an error is emitted when an invalid address family is returned. + const s = connectDoesNotThrow((host, options, cb) => { + cb(null, '127.0.0.1', 100); + }); + + s.on('error', common.expectsError({ code: 'ERR_INVALID_ADDRESS_FAMILY' })); } |