From 5086d6ef94d1ce2b67193781052be84bb6913e63 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Fri, 15 Aug 2014 10:40:09 -0400 Subject: [PATCH] dns: throw if hostname is not string or falsey 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 --- lib/dns.js | 4 +++- test/simple/test-dns.js | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/lib/dns.js b/lib/dns.js index 288373b45f1..c61e6e9fc44 100644 --- a/lib/dns.js +++ b/lib/dns.js @@ -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') { diff --git a/test/simple/test-dns.js b/test/simple/test-dns.js index c62a3c889c3..405bcf0a089 100644 --- a/test/simple/test-dns.js +++ b/test/simple/test-dns.js @@ -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: