diff --git a/lib/_http_server.js b/lib/_http_server.js index 3b2d7f50419127..96f05f5819d3a8 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -47,6 +47,7 @@ const { IncomingMessage } = require('_http_incoming'); const { ERR_HTTP_HEADERS_SENT, ERR_HTTP_INVALID_STATUS_CODE, + ERR_INVALID_ARG_TYPE, ERR_INVALID_CHAR } = require('internal/errors').codes; const Buffer = require('buffer').Buffer; @@ -281,6 +282,8 @@ function Server(options, requestListener) { options = {}; } else if (options == null || typeof options === 'object') { options = util._extend({}, options); + } else { + throw new ERR_INVALID_ARG_TYPE('options', 'object', options); } this[kIncomingMessage] = options.IncomingMessage || IncomingMessage; diff --git a/test/parallel/test-http-server.js b/test/parallel/test-http-server.js index d46e25bdf6c558..f591cd59fc63c2 100644 --- a/test/parallel/test-http-server.js +++ b/test/parallel/test-http-server.js @@ -27,6 +27,19 @@ const http = require('http'); const url = require('url'); const qs = require('querystring'); +// TODO: documentation does not allow Array as an option, so testing that +// should fail, but currently http.Server does not typecheck further than +// if `option` is `typeof object` - so we don't test that here right now +const invalid_options = [ 'foo', 42, true ]; + +invalid_options.forEach((option) => { + assert.throws(() => { + new http.Server(option); + }, { + code: 'ERR_INVALID_ARG_TYPE' + }); +}); + let request_number = 0; let requests_sent = 0; let server_response = '';