net: throw error if port/path does not exist in options

Throw error ERR_INVALID_ARG_VALUE if the port and path properties
do not exist in the options object argument when calling
server.listen().

Refs: https://github.com/nodejs/node/issues/16712

PR-URL: https://github.com/nodejs/node/pull/22085
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
Yaniv Friedensohn 2018-08-02 13:28:14 +03:00 committed by Anna Henningsen
parent 7aac70607d
commit 4a0466f23a
No known key found for this signature in database
GPG Key ID: 9C63F3A6CD2AD8F9
2 changed files with 29 additions and 7 deletions

View File

@ -68,6 +68,7 @@ const errors = require('internal/errors');
const {
ERR_INVALID_ADDRESS_FAMILY,
ERR_INVALID_ARG_TYPE,
ERR_INVALID_ARG_VALUE,
ERR_INVALID_FD_TYPE,
ERR_INVALID_IP_ADDRESS,
ERR_INVALID_OPT_VALUE,
@ -1496,6 +1497,11 @@ Server.prototype.listen = function(...args) {
return this;
}
if (!(('port' in options) || ('path' in options))) {
throw new ERR_INVALID_ARG_VALUE('options', options,
'must have the property "port" or "path"');
}
throw new ERR_INVALID_OPT_VALUE('options', util.inspect(options));
};

View File

@ -57,12 +57,23 @@ const listenOnPort = [
const block = () => {
net.createServer().listen(options, common.mustNotCall());
};
common.expectsError(block,
{
code: 'ERR_INVALID_OPT_VALUE',
type: TypeError,
message: /^The value "{.*}" is invalid for option "options"$/
});
if (typeof options === 'object' &&
!(('port' in options) || ('path' in options))) {
common.expectsError(block,
{
code: 'ERR_INVALID_ARG_VALUE',
type: TypeError,
message: /^The argument 'options' must have the property "port" or "path"\. Received .+$/,
});
} else {
common.expectsError(block,
{
code: 'ERR_INVALID_OPT_VALUE',
type: TypeError,
message: /^The value "{.*}" is invalid for option "options"(?:\. .+)?$/,
});
}
}
shouldFailToListen(false, { port: false });
@ -73,6 +84,11 @@ const listenOnPort = [
shouldFailToListen({ fd: -1 });
// Invalid path in listen(options)
shouldFailToListen({ path: -1 });
// Host without port
// Neither port or path are specified in options
shouldFailToListen({});
shouldFailToListen({ host: 'localhost' });
shouldFailToListen({ host: 'localhost:3000' });
shouldFailToListen({ host: { port: 3000 } });
shouldFailToListen({ exclusive: true });
}