Skip to content

Commit ad16db3

Browse files
committed
Wrap obj.constructor test in try/catch. Thanks to bkrausz. Fixes #9897
1 parent 27291ff commit ad16db3

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

src/core.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -500,10 +500,15 @@ jQuery.extend({
500500
return false;
501501
}
502502

503-
// Not own constructor property must be Object
504-
if ( obj.constructor &&
505-
!hasOwn.call(obj, "constructor") &&
506-
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
503+
try {
504+
// Not own constructor property must be Object
505+
if ( obj.constructor &&
506+
!hasOwn.call(obj, "constructor") &&
507+
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
508+
return false;
509+
}
510+
} catch ( e ) {
511+
// IE8,9 Will throw exceptions on certain host objects #9897
507512
return false;
508513
}
509514

test/unit/core.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ test("type", function() {
290290
});
291291

292292
test("isPlainObject", function() {
293-
expect(14);
293+
expect(15);
294294

295295
stop();
296296

@@ -331,6 +331,13 @@ test("isPlainObject", function() {
331331
// Window
332332
ok(!jQuery.isPlainObject(window), "window");
333333

334+
try {
335+
jQuery.isPlainObject( window.location );
336+
ok( true, "Does not throw exceptions on host objects");
337+
} catch ( e ) {
338+
ok( false, "Does not throw exceptions on host objects -- FAIL");
339+
}
340+
334341
try {
335342
var iframe = document.createElement("iframe");
336343
document.body.appendChild(iframe);

0 commit comments

Comments
 (0)