diff --git a/lib/internal/net.js b/lib/internal/net.js new file mode 100644 index 00000000000000..effc6485d25011 --- /dev/null +++ b/lib/internal/net.js @@ -0,0 +1,11 @@ +'use strict'; + +module.exports = { isLegalPort }; + +// Check that the port number is not NaN when coerced to a number, +// is an integer and that it falls within the legal range of port numbers. +function isLegalPort(port) { + if (typeof port === 'string' && port.trim() === '') + return false; + return +port === (port >>> 0) && port >= 0 && port <= 0xFFFF; +} diff --git a/lib/net.js b/lib/net.js index 7a612096ab45d0..ea192017736e41 100644 --- a/lib/net.js +++ b/lib/net.js @@ -5,6 +5,7 @@ const stream = require('stream'); const timers = require('timers'); const util = require('util'); const internalUtil = require('internal/util'); +const internalNet = require('internal/net'); const assert = require('assert'); const cares = process.binding('cares_wrap'); const uv = process.binding('uv'); @@ -22,6 +23,7 @@ const WriteWrap = process.binding('stream_wrap').WriteWrap; var cluster; const errnoException = util._errnoException; const exceptionWithHostPort = util._exceptionWithHostPort; +const isLegalPort = internalNet.isLegalPort; function noop() {} @@ -846,15 +848,6 @@ function connect(self, address, port, addressType, localAddress, localPort) { } -// Check that the port number is not NaN when coerced to a number, -// is an integer and that it falls within the legal range of port numbers. -function isLegalPort(port) { - if (typeof port === 'string' && port.trim() === '') - return false; - return +port === (port >>> 0) && port >= 0 && port <= 0xFFFF; -} - - Socket.prototype.connect = function(options, cb) { if (this.write !== Socket.prototype.write) this.write = Socket.prototype.write; diff --git a/node.gyp b/node.gyp index 720d51946976b2..0aee6d1ab3abf9 100644 --- a/node.gyp +++ b/node.gyp @@ -72,6 +72,7 @@ 'lib/internal/child_process.js', 'lib/internal/cluster.js', 'lib/internal/freelist.js', + 'lib/internal/net.js', 'lib/internal/module.js', 'lib/internal/socket_list.js', 'lib/internal/repl.js', diff --git a/test/parallel/test-net-internal.js b/test/parallel/test-net-internal.js new file mode 100644 index 00000000000000..b59b92d0fb2b94 --- /dev/null +++ b/test/parallel/test-net-internal.js @@ -0,0 +1,15 @@ +'use strict'; + +// Flags: --expose-internals + +require('../common'); +const assert = require('assert'); +const net = require('internal/net'); + +assert.strictEqual(net.isLegalPort(''), false); +assert.strictEqual(net.isLegalPort('0'), true); +assert.strictEqual(net.isLegalPort(0), true); +assert.strictEqual(net.isLegalPort(65536), false); +assert.strictEqual(net.isLegalPort('65535'), true); +assert.strictEqual(net.isLegalPort(undefined), false); +assert.strictEqual(net.isLegalPort(null), true);