From 6a6112a2f38810ff5346a614fbaf3514d632f682 Mon Sep 17 00:00:00 2001 From: Benjamin Gruenbaum Date: Tue, 22 Mar 2016 15:40:36 +0200 Subject: [PATCH] dns: Use object without protoype for map MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently we use `{}` for the `lookup` function to find the relevant resolver to the dns.resolve function. It is preferable to use an object without a Object.prototype, currently for example you can do something like: ```js dns.resolve("google.com", "toString", console.log); ``` And get `[Object undefined]` logged and the callback would never be called. This is unexpected and strange behavior in my opinion. In addition, if someone adds a property to `Object.prototype` might also create unexpected results. This pull request fixes it, with it an appropriate error is thrown. PR-URL: https://github.com/nodejs/node/pull/5843 Reviewed-By: James M Snell Reviewed-By: Michaƫl Zasso Reviewed-By: Colin Ihrig --- lib/dns.js | 2 +- test/parallel/test-c-ares.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/dns.js b/lib/dns.js index 96c9ca59206289..dad4353ea2a5b7 100644 --- a/lib/dns.js +++ b/lib/dns.js @@ -240,7 +240,7 @@ function resolver(bindingName) { } -var resolveMap = {}; +var resolveMap = Object.create(null); exports.resolve4 = resolveMap.A = resolver('queryA'); exports.resolve6 = resolveMap.AAAA = resolver('queryAaaa'); exports.resolveCname = resolveMap.CNAME = resolver('queryCname'); diff --git a/test/parallel/test-c-ares.js b/test/parallel/test-c-ares.js index b7802881f8e47c..9a061bab1acb01 100644 --- a/test/parallel/test-c-ares.js +++ b/test/parallel/test-c-ares.js @@ -27,6 +27,11 @@ assert.throws(function() { dns.resolve('www.google.com', 'HI'); }, /Unknown type/); +// Try calling resolve with an unsupported type that's an object key +assert.throws(function() { + dns.resolve('www.google.com', 'toString'); +}, /Unknown type/); + // Windows doesn't usually have an entry for localhost 127.0.0.1 in // C:\Windows\System32\drivers\etc\hosts // so we disable this test on Windows.