Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

net: throw error if port does not exist in options #22085

6 changes: 6 additions & 0 deletions lib/net.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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));
};

Expand Down
30 changes: 23 additions & 7 deletions test/parallel/test-net-server-listen-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 });
Expand All @@ -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 });
}