dns: verify argument is valid function in resolve
authorKenan Sulayman <kenan@sly.mn>
Fri, 7 Feb 2014 17:18:27 +0000 (18:18 +0100)
committerFedor Indutny <fedor.indutny@gmail.com>
Sun, 9 Feb 2014 09:37:50 +0000 (13:37 +0400)
Don't use argument as callback if it's not a valid callback function.
Throw a valid exception instead explaining the issue.

Adds to #7070 ("DNS — Throw meaningful error(s)").

lib/dns.js
test/simple/test-dns.js

index cbba372..d77159d 100644 (file)
@@ -185,9 +185,11 @@ exports.resolve = function(hostname, type_, callback_) {
   if (util.isString(type_)) {
     resolver = resolveMap[type_];
     callback = callback_;
-  } else {
+  } else if (util.isFunction(type_)) {
     resolver = exports.resolve4;
     callback = type_;
+  } else {
+    throw new Error('Type must be a string');
   }
 
   if (util.isFunction(resolver)) {
index 9283bab..e7dce4b 100644 (file)
@@ -60,3 +60,13 @@ assert.deepEqual(dns.getServers(), portsExpected);
 
 assert.doesNotThrow(function () { dns.setServers([]); });
 assert.deepEqual(dns.getServers(), []);
+
+assert.throws(
+  function() {
+    dns.resolve('test.com', [], new Function);
+  },
+  function(err) {
+    return !(err instanceof TypeError);
+  },
+  "Unexpected error"
+);