Skip to content

Commit

Permalink
http: else case is not reachable
Browse files Browse the repository at this point in the history
While checking the arguments passed to http.Server, the case where
the options argument was of wrong type was not handled. Now it
throws an ERR_INVALID_ARG_TYPE error if the options argument is
not a function, object, null, or undefined.

PR-URL: #24176
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
  • Loading branch information
szabolcsit authored and Trott committed Nov 15, 2018
1 parent bd765d6 commit f3b49cf
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 0 deletions.
3 changes: 3 additions & 0 deletions lib/_http_server.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
13 changes: 13 additions & 0 deletions test/parallel/test-http-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = '';
Expand Down

0 comments on commit f3b49cf

Please sign in to comment.