Browse Source

dns: fix GetAddrInfo assert

The method GetAddrInfo() is used by more than just dns.lookup(), and in
those cases a third argument isn't passed. This caused the following
check to abort:

  assert(args[3]->IsInt32());

Fixes: 4306786 "net: don't prefer IPv4 addresses during resolution"

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
archived-io.js-v0.10
Trevor Norris 11 years ago
parent
commit
e643fe4c4b
  1. 7
      lib/dns.js
  2. 3
      src/cares_wrap.cc

7
lib/dns.js

@ -102,17 +102,14 @@ function onlookup(err, addresses) {
// lookup(hostname, [options,] callback) // lookup(hostname, [options,] callback)
exports.lookup = function lookup(hostname, options, callback) { exports.lookup = function lookup(hostname, options, callback) {
var hints = 0; var hints = 0;
var family; var family = 0;
// Parse arguments // Parse arguments
if (typeof options === 'function') { if (typeof options === 'function') {
callback = options; callback = options;
family = 0; family = 0;
// Allow user to pass falsy values to options, and still pass callback.
} else if (typeof callback !== 'function') { } else if (typeof callback !== 'function') {
throw TypeError('invalid arguments: callback must be passed'); throw TypeError('invalid arguments: callback must be passed');
} else if (!options) {
family = 0;
} else if (util.isObject(options)) { } else if (util.isObject(options)) {
hints = options.hints >>> 0; hints = options.hints >>> 0;
family = options.family >>> 0; family = options.family >>> 0;
@ -123,8 +120,6 @@ exports.lookup = function lookup(hostname, options, callback) {
hints !== (exports.ADDRCONFIG | exports.V4MAPPED)) { hints !== (exports.ADDRCONFIG | exports.V4MAPPED)) {
throw new TypeError('invalid argument: hints must use valid flags'); throw new TypeError('invalid argument: hints must use valid flags');
} }
} else {
family = options >>> 0;
} }
if (family !== 0 && family !== 4 && family !== 6) if (family !== 0 && family !== 4 && family !== 6)

3
src/cares_wrap.cc

@ -1014,12 +1014,11 @@ static void GetAddrInfo(const FunctionCallbackInfo<Value>& args) {
assert(args[0]->IsObject()); assert(args[0]->IsObject());
assert(args[1]->IsString()); assert(args[1]->IsString());
assert(args[2]->IsInt32()); assert(args[2]->IsInt32());
assert(args[3]->IsInt32());
Local<Object> req_wrap_obj = args[0].As<Object>(); Local<Object> req_wrap_obj = args[0].As<Object>();
node::Utf8Value hostname(args[1]); node::Utf8Value hostname(args[1]);
int32_t flags = (args[3]->IsInt32()) ? args[3]->Int32Value() : 0;
int family; int family;
int32_t flags = args[3]->Int32Value();
switch (args[2]->Int32Value()) { switch (args[2]->Int32Value()) {
case 0: case 0:

Loading…
Cancel
Save