Ensure isIterateeCall doesn't error if index is an object without a toString method. [closes #994]

This commit is contained in:
jdalton
2015-02-23 23:48:13 -08:00
parent d76d7582fe
commit 5ef9a4be8a
2 changed files with 25 additions and 8 deletions

View File

@@ -3839,8 +3839,11 @@
} else {
prereq = type == 'string' && index in object;
}
var other = object[index];
return prereq && (value === value ? value === other : other !== other);
if (prereq) {
var other = object[index];
return value === value ? value === other : other !== other;
}
return false;
}
/**

View File

@@ -833,6 +833,18 @@
}
});
test('should return `false` for non-iteratee calls', 4, function() {
if (func) {
strictEqual(func(2, 0, array), false);
strictEqual(func(1, 1.1, array), false);
strictEqual(func(1, 0, { 'length': MAX_SAFE_INTEGER + 1 }), false);
strictEqual(func(1, 'b', object), false);
}
else {
skipTest(4);
}
});
test('should work with `NaN` values', 2, function() {
if (func) {
strictEqual(func(NaN, 0, [NaN]), true);
@@ -843,15 +855,17 @@
}
});
test('should return `false` for non-iteratee calls', 4, function() {
test('should not error when `index` is an object without a `toString` method', 1, function() {
if (func) {
strictEqual(func(2, 0, array), false);
strictEqual(func(1, 1.1, array), false);
strictEqual(func(1, 0, { 'length': MAX_SAFE_INTEGER + 1 }), false);
strictEqual(func(1, 'b', object), false);
try {
var actual = func(1, { 'toString': null }, [1]);
} catch(e) {
var message = e.message;
}
strictEqual(actual, false, message || '');
}
else {
skipTest(4);
skipTest();
}
});
}());