aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>2019-10-21 19:04:48 +0200
committerGitHub <noreply@github.com>2019-10-21 19:04:48 +0200
commit15750b0af270da07917b70457cf09bda97d3d935 (patch)
tree3e3371a3a6acdd9b777119e2b9d7351ea687c2aa
parentf09d92100ffff6208211b200ed0cdc39bfd17fc3 (diff)
downloadjquery-15750b0af270da07917b70457cf09bda97d3d935.tar.gz
jquery-15750b0af270da07917b70457cf09bda97d3d935.zip
Selector: Use shallow document comparisons in uniqueSort
IE/Edge sometimes crash when comparing documents between frames using the strict equality operator (`===` & `!==`). Funnily enough, shallow comparisons (`==` & `!=`) work without crashing. The change to shallow comparisons in `src/selector.js` was done in gh-4471 but relevant changes in `src/selector/uniqueSort.js` were missed. Those changes have landed in Sizzle in jquery/sizzle#459. Fixes gh-4441 Closes gh-4512 Ref gh-4471 Ref jquery/sizzle#459
-rw-r--r--src/selector/uniqueSort.js19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/selector/uniqueSort.js b/src/selector/uniqueSort.js
index a0454812a..ec97de849 100644
--- a/src/selector/uniqueSort.js
+++ b/src/selector/uniqueSort.js
@@ -24,7 +24,11 @@ function sortOrder( a, b ) {
}
// Calculate position if both inputs belong to the same document
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
a.compareDocumentPosition( b ) :
// Otherwise we know they are disconnected
@@ -34,11 +38,20 @@ function sortOrder( a, b ) {
if ( compare & 1 ) {
// Choose the first element that is related to the document
- if ( a === document || a.ownerDocument === document &&
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( a == document || a.ownerDocument == document &&
jQuery.contains( document, a ) ) {
return -1;
}
- if ( b === document || b.ownerDocument === document &&
+
+ // Support: IE 11+, Edge 17 - 18+
+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+ // two documents; shallow comparisons work.
+ // eslint-disable-next-line eqeqeq
+ if ( b == document || b.ownerDocument == document &&
jQuery.contains( document, b ) ) {
return 1;
}