summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2018-03-17 12:43:50 -0400
committercjihrig <cjihrig@gmail.com>2018-03-19 14:49:34 -0400
commit7c73cd4c70513dd4fa1f7ea13e3bb3270696eabe (patch)
tree4f8cd1c56d3370139a4e08c6810bade79edb22b5
parent0fb017d684448308bb78d43f2c32e0b15d1c8241 (diff)
downloadnode-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.md5
-rw-r--r--lib/internal/errors.js1
-rw-r--r--lib/net.js7
-rw-r--r--test/parallel/test-net-options-lookup.js11
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' }));
}