Skip to content

Commit

Permalink
dns: throw if hostname is not string or falsey
Browse files Browse the repository at this point in the history
Fix assertion failure from poor argument parsing logic introduced in
6ea5d16. Add tests to make sure arguments are properly parsed.

Fixes: 6ea5d16 "dns: always set variable family in lookup()"
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
  • Loading branch information
cjihrig authored and trevnorris committed Aug 20, 2014
1 parent 437c2f4 commit 5086d6e
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
4 changes: 3 additions & 1 deletion lib/dns.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,9 @@ exports.lookup = function lookup(hostname, options, callback) {
var family = -1;

// Parse arguments
if (typeof options === 'function') {
if (hostname && typeof hostname !== 'string') {
throw TypeError('invalid arguments: hostname must be a string or falsey');
} else if (typeof options === 'function') {
callback = options;
family = 0;
} else if (typeof callback !== 'function') {
Expand Down
41 changes: 41 additions & 0 deletions test/simple/test-dns.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,47 @@ assert.throws(function() {
return !(err instanceof TypeError);
}, 'Unexpected error');

// dns.lookup should accept falsey and string values
assert.throws(function() {
dns.lookup({}, noop);
}, 'invalid arguments: hostname must be a string or falsey');

assert.throws(function() {
dns.lookup([], noop);
}, 'invalid arguments: hostname must be a string or falsey');

assert.throws(function() {
dns.lookup(true, noop);
}, 'invalid arguments: hostname must be a string or falsey');

assert.throws(function() {
dns.lookup(1, noop);
}, 'invalid arguments: hostname must be a string or falsey');

assert.throws(function() {
dns.lookup(noop, noop);
}, 'invalid arguments: hostname must be a string or falsey');

assert.doesNotThrow(function() {
dns.lookup('', noop);
});

assert.doesNotThrow(function() {
dns.lookup(null, noop);
});

assert.doesNotThrow(function() {
dns.lookup(undefined, noop);
});

assert.doesNotThrow(function() {
dns.lookup(0, noop);
});

assert.doesNotThrow(function() {
dns.lookup(NaN, noop);
});

/*
* Make sure that dns.lookup throws if hints does not represent a valid flag.
* (dns.V4MAPPED | dns.ADDRCONFIG) + 1 is invalid because:
Expand Down

0 comments on commit 5086d6e

Please sign in to comment.