mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Merge pull request #4823 from spicyj/gh-4776
Don't try to iterate over non-objects
This commit is contained in:
@@ -135,6 +135,9 @@ function getAddendaForKeyUse(messageType, element, parentType) {
|
||||
* @param {*} parentType node's parent's type.
|
||||
*/
|
||||
function validateChildKeys(node, parentType) {
|
||||
if (typeof node !== 'object') {
|
||||
return;
|
||||
}
|
||||
if (Array.isArray(node)) {
|
||||
for (var i = 0; i < node.length; i++) {
|
||||
var child = node[i];
|
||||
|
||||
@@ -449,4 +449,24 @@ describe('ReactElementValidator', function() {
|
||||
expect(console.error.argsForCall.length).toBe(0);
|
||||
});
|
||||
|
||||
it('should not enumerate enumerable numbers (#4776)', function() {
|
||||
/*eslint-disable no-extend-native */
|
||||
Number.prototype['@@iterator'] = function() {
|
||||
throw new Error('number iterator called');
|
||||
};
|
||||
/*eslint-enable no-extend-native */
|
||||
|
||||
try {
|
||||
void (
|
||||
<div>
|
||||
{5}
|
||||
{12}
|
||||
{13}
|
||||
</div>
|
||||
);
|
||||
} finally {
|
||||
delete Number.prototype['@@iterator'];
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -435,4 +435,45 @@ describe('traverseAllChildren', function() {
|
||||
);
|
||||
});
|
||||
|
||||
it('should not enumerate enumerable numbers (#4776)', function() {
|
||||
/*eslint-disable no-extend-native */
|
||||
Number.prototype['@@iterator'] = function() {
|
||||
throw new Error('number iterator called');
|
||||
};
|
||||
/*eslint-enable no-extend-native */
|
||||
|
||||
try {
|
||||
var instance = (
|
||||
<div>
|
||||
{5}
|
||||
{12}
|
||||
{13}
|
||||
</div>
|
||||
);
|
||||
|
||||
var traverseFn = jasmine.createSpy();
|
||||
|
||||
traverseAllChildren(instance.props.children, traverseFn, null);
|
||||
expect(traverseFn.calls.length).toBe(3);
|
||||
|
||||
expect(traverseFn).toHaveBeenCalledWith(
|
||||
null,
|
||||
5,
|
||||
'.0'
|
||||
);
|
||||
expect(traverseFn).toHaveBeenCalledWith(
|
||||
null,
|
||||
12,
|
||||
'.1'
|
||||
);
|
||||
expect(traverseFn).toHaveBeenCalledWith(
|
||||
null,
|
||||
13,
|
||||
'.2'
|
||||
);
|
||||
} finally {
|
||||
delete Number.prototype['@@iterator'];
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user