Package: release.debian.org Severity: normal Tags: buster User: release.debian....@packages.debian.org Usertags: pu
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Dear Release Team, [ Reason ] I would like to fix CVE-2020-11022 and CVE-2020-11023. The same fix has been prepared for stretch and will be uploaded concurrently with the buster fix. The security team has marked these issues as no-dsa. [ Impact ] jquery would be vulnerable if not approved. [ Tests ] Backported patch was reviewed and approved by the Debian package maintainers. Sadly, no reproducers were released. [ Checklist ] [x] *all* changes are documented in the d/changelog [x] I reviewed all changes and I approve them, along with the maintainers of jquery [x] attach debdiff against the package in (old)stable [N/A] the issue is verified as fixed in unstable (jquery is not present in unstable/testing) Regards, - -Roberto -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEIYZ1DR4ae5UL01q7ldFmTdL1kUIFAmBH//4ACgkQldFmTdL1 kULu7w/+KzQq0SMV/rDPj/BUs+wyoeqGfvLiMhOcA019wDblB17wW2x/4kWQWCMa 75tXD7kep+6b1lLNBPj75fcC9xHNiV9XTGgAwViHOBQ85bxfbc1Zi0YEnXfrgjeG vi1xtHeLUNgDrCG/+UQP8qJn7+asURfism9v1WhmH93jd8+J9AleHOvUR0WjUVz2 tKIHXPBNQ0yDbJO34HXzvXio7IvJxXlNZ+ivK0AlUQVwam1LThy+tCk4hob8NXQg JGvomGG/GDbMnQ/yNMc3IRHVDas0nLbmaa026kcHE05pQjhdPYOYckL/Jl5MW84s 5L+foc1dfAi7A4a3Bo898FDkaJqD41VCAgKjUbjD0aBc38D310ksqGlep3scOqn0 uX5GUCWcvTg05OHCKGrd28YyYckUDDRaL1Ln0MtSfYGQGgG3DyXqAGpAPCxA6PeW gGMuBDy3t68kkCQoAqYzqkpn/oTS+3T6LWm35/c2X5FJAChM9gsDAaJ3IaofX84x pzPu6VX7O3cPLMaV7cBKj4Ix85iBdKNHKRZlbruiCxRtzWgiMyyDLhsaj4Fbp989 hWddYqdb6Wj01CCAoDkHvsfg6GuSd/WGiEt1MCP0EqDUQ6WRJjmugELCThYj7c3U PXxNmveHtehpN7+5MG1lNlLJ8hLydLS5CfphwwCrsOF2+MfRzRk= =WoIV -----END PGP SIGNATURE-----
diff -Nru jquery-3.3.1~dfsg/debian/changelog jquery-3.3.1~dfsg/debian/changelog --- jquery-3.3.1~dfsg/debian/changelog 2019-04-19 02:52:35.000000000 -0400 +++ jquery-3.3.1~dfsg/debian/changelog 2021-03-09 14:42:16.000000000 -0500 @@ -1,3 +1,13 @@ +jquery (3.3.1~dfsg-3+deb10u1) buster; urgency=high + + * Non-maintainer upload by the LTS Team. + * Prevent untrusted code execution when passing untrusted HTML to DOM + manipulation methods. (CVE-2020-11022) + * Prevent untrusted code execution when passing HTML containing <option> + elements to DOM manipulation methods. (CVE-2020-11023) + + -- Roberto C. Sánchez <robe...@debian.org> Tue, 09 Mar 2021 14:42:16 -0500 + jquery (3.3.1~dfsg-3) unstable; urgency=medium * Team upload diff -Nru jquery-3.3.1~dfsg/debian/patches/CVE-2020-11022.patch jquery-3.3.1~dfsg/debian/patches/CVE-2020-11022.patch --- jquery-3.3.1~dfsg/debian/patches/CVE-2020-11022.patch 1969-12-31 19:00:00.000000000 -0500 +++ jquery-3.3.1~dfsg/debian/patches/CVE-2020-11022.patch 2021-03-09 14:42:16.000000000 -0500 @@ -0,0 +1,1749 @@ +From 1d61fd9407e6fbe82fe55cb0b938307aa0791f77 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?= + <m.go...@gmail.com> +Date: Mon, 16 Mar 2020 21:49:29 +0100 +Subject: [PATCH] Manipulation: Make jQuery.htmlPrefilter an identity function + +Closes gh-4642 + +(cherry picked from 90fed4b453a5becdb7f173d9e3c1492390a1441f) +--- + src/manipulation.js | 9 +-- + test/data/testinit.js | 2 +- + test/localfile.html | 2 +- + test/unit/ajax.js | 8 +-- + test/unit/attributes.js | 46 ++++++------- + test/unit/basic.js | 24 +++---- + test/unit/core.js | 14 ++-- + test/unit/css.js | 112 +++++++++++++++---------------- + test/unit/data.js | 20 +++--- + test/unit/deprecated.js | 2 +- + test/unit/dimensions.js | 30 ++++----- + test/unit/effects.js | 22 +++--- + test/unit/event.js | 26 +++---- + test/unit/manipulation.js | 138 ++++++++++++++++++-------------------- + test/unit/offset.js | 10 +-- + test/unit/selector.js | 4 +- + test/unit/traversing.js | 22 +++--- + test/unit/wrap.js | 12 ++-- + 18 files changed, 246 insertions(+), 257 deletions(-) + +--- a/src/manipulation.js ++++ b/src/manipulation.js +@@ -32,13 +32,6 @@ + + var + +- /* eslint-disable max-len */ +- +- // See https://github.com/eslint/eslint/issues/3229 +- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, +- +- /* eslint-enable */ +- + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ +@@ -235,7 +228,7 @@ + + jQuery.extend( { + htmlPrefilter: function( html ) { +- return html.replace( rxhtmlTag, "<$1></$2>" ); ++ return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { +--- a/test/data/testinit.js ++++ b/test/data/testinit.js +@@ -244,7 +244,7 @@ + } + wrapper.call( QUnit, title, function( assert ) { + var done = assert.async(), +- $iframe = supportjQuery( "<iframe/>" ) ++ $iframe = supportjQuery( "<iframe></iframe>" ) + .css( { position: "absolute", top: "0", left: "-600px", width: "500px" } ) + .attr( { id: "qunit-fixture-iframe", src: url( fileName ) } ); + +--- a/test/localfile.html ++++ b/test/localfile.html +@@ -49,7 +49,7 @@ + <script> + var logUL = jQuery( "#log" ); + function doLog( message, args ) { +- jQuery( "<li />").appendTo( logUL ).text( message + ': "' + Array.prototype.join.call( args, '" - "' ) + '"' ); ++ jQuery( "<li></li>" ).appendTo( logUL ).text( message + ': "' + Array.prototype.join.call( args, '" - "' ) + '"' ); + } + jQuery.ajax( "./data/badjson.js" , { + context: jQuery( "#success" ), +--- a/test/unit/ajax.js ++++ b/test/unit/ajax.js +@@ -2352,7 +2352,7 @@ + + addGlobalEvents( "ajaxStart ajaxStop ajaxSend ajaxComplete ajaxError", assert )(); + jQuery( document ).ajaxStop( done ); +- jQuery( "<div/>" ).load( baseURL + "404.txt", function() { ++ jQuery( "<div></div>" ).load( baseURL + "404.txt", function() { + assert.ok( true, "complete" ); + } ); + } ); +@@ -2445,7 +2445,7 @@ + return "Hello World"; + } + } ); +- jQuery( "<div/>" ).load( url( "name.html" ), function( responseText ) { ++ jQuery( "<div></div>" ).load( url( "name.html" ), function( responseText ) { + assert.strictEqual( jQuery( this ).html(), "Hello World", "Test div was filled with filtered data" ); + assert.strictEqual( responseText, "Hello World", "Test callback receives filtered data" ); + QUnit.start(); +@@ -2453,7 +2453,7 @@ + } ); + + QUnit.asyncTest( "jQuery.fn.load( String, Object, Function )", 2, function( assert ) { +- jQuery( "<div />" ).load( url( "mock.php?action=echoHtml" ), { ++ jQuery( "<div></div>" ).load( url( "mock.php?action=echoHtml" ), { + "bar": "ok" + }, function() { + var $node = jQuery( this ); +@@ -2466,7 +2466,7 @@ + QUnit.test( "jQuery.fn.load( String, String, Function )", 2, function( assert ) { + var done = assert.async(); + +- jQuery( "<div />" ).load( url( "mock.php?action=echoHtml" ), "foo=3&bar=ok", function() { ++ jQuery( "<div></div>" ).load( url( "mock.php?action=echoHtml" ), "foo=3&bar=ok", function() { + var $node = jQuery( this ); + assert.strictEqual( $node.find( "#method" ).text(), "GET", "Check method" ); + assert.ok( $node.find( "#query" ).text().match( /foo=3&bar=ok/ ), "Check if a string of data is passed correctly" ); +--- a/test/unit/attributes.js ++++ b/test/unit/attributes.js +@@ -93,12 +93,12 @@ + assert.equal( jQuery( "#area1" ).attr( "maxLength" ), "30", "Check for maxLength attribute" ); + + // using innerHTML in IE causes href attribute to be serialized to the full path +- jQuery( "<a/>" ).attr( { ++ jQuery( "<a></a>" ).attr( { + "id": "tAnchor5", + "href": "#5" + } ).appendTo( "#qunit-fixture" ); + assert.equal( jQuery( "#tAnchor5" ).attr( "href" ), "#5", "Check for non-absolute href (an anchor)" ); +- jQuery( "<a id='tAnchor6' href='#5' />" ).appendTo( "#qunit-fixture" ); ++ jQuery( "<a id='tAnchor6' href='#5'></a>" ).appendTo( "#qunit-fixture" ); + assert.equal( jQuery( "#tAnchor5" ).prop( "href" ), jQuery( "#tAnchor6" ).prop( "href" ), "Check for absolute href prop on an anchor" ); + + jQuery( "<script type='jquery/test' src='#5' id='scriptSrc'></script>" ).appendTo( "#qunit-fixture" ); +@@ -136,7 +136,7 @@ + assert.equal( $img.attr( "height" ), "53", "Retrieve height attribute on an element with display:none." ); + + // Check for style support +- styleElem = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ).css( { ++ styleElem = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ).css( { + background: "url(UPPERlower.gif)" + } ); + assert.ok( !!~styleElem.attr( "style" ).indexOf( "UPPERlower.gif" ), "Check style attribute getter" ); +@@ -158,11 +158,11 @@ + $a = jQuery( "<a href='#' onclick='something()'>Click</a>" ).appendTo( "#qunit-fixture" ); + assert.equal( $a.attr( "onclick" ), "something()", "Retrieve ^on attribute without anonymous function wrapper." ); + +- assert.ok( jQuery( "<div/>" ).attr( "doesntexist" ) === undefined, "Make sure undefined is returned when no attribute is found." ); +- assert.ok( jQuery( "<div/>" ).attr( "title" ) === undefined, "Make sure undefined is returned when no attribute is found." ); +- assert.equal( jQuery( "<div/>" ).attr( "title", "something" ).attr( "title" ), "something", "Set the title attribute." ); ++ assert.ok( jQuery( "<div></div>" ).attr( "doesntexist" ) === undefined, "Make sure undefined is returned when no attribute is found." ); ++ assert.ok( jQuery( "<div></div>" ).attr( "title" ) === undefined, "Make sure undefined is returned when no attribute is found." ); ++ assert.equal( jQuery( "<div></div>" ).attr( "title", "something" ).attr( "title" ), "something", "Set the title attribute." ); + assert.ok( jQuery().attr( "doesntexist" ) === undefined, "Make sure undefined is returned when no element is there." ); +- assert.equal( jQuery( "<div/>" ).attr( "value" ), undefined, "An unset value on a div returns undefined." ); ++ assert.equal( jQuery( "<div></div>" ).attr( "value" ), undefined, "An unset value on a div returns undefined." ); + assert.strictEqual( jQuery( "<select><option value='property'></option></select>" ).attr( "value" ), undefined, "An unset value on a select returns undefined." ); + + $form = jQuery( "#form" ).attr( "enctype", "multipart/form-data" ); +@@ -180,7 +180,7 @@ + + assert.strictEqual( input.clone( true ).attr( "name", "test" )[ 0 ].name, "test", "Name attribute should be changed on cloned element" ); + +- div = jQuery( "<div id='tester' />" ); ++ div = jQuery( "<div id='tester'></div>" ); + div.attr( "id" ); + + assert.strictEqual( div.clone( true ).attr( "id", "test" )[ 0 ].id, "test", "Id attribute should be changed on cloned element" ); +@@ -299,7 +299,7 @@ + $input = jQuery( "<input type='checkbox'/>" ).attr( "checked", true ); + assert.equal( $input.prop( "checked" ), true, "Setting checked updates property (verified by .prop)" ); + assert.equal( $input[ 0 ].checked, true, "Setting checked updates property (verified by native property)" ); +- $input = jQuery( "<option/>" ).attr( "selected", true ); ++ $input = jQuery( "<option></option>" ).attr( "selected", true ); + assert.equal( $input.prop( "selected" ), true, "Setting selected updates property (verified by .prop)" ); + assert.equal( $input[ 0 ].selected, true, "Setting selected updates property (verified by native property)" ); + +@@ -592,7 +592,7 @@ + assert.expect( 12 ); + var $first; + +- assert.equal( jQuery( "<div class='hello' />" ).removeAttr( "class" ).attr( "class" ), undefined, "remove class" ); ++ assert.equal( jQuery( "<div class='hello'></div>" ).removeAttr( "class" ).attr( "class" ), undefined, "remove class" ); + assert.equal( jQuery( "#form" ).removeAttr( "id" ).attr( "id" ), undefined, "Remove id" ); + assert.equal( jQuery( "#foo" ).attr( "style", "position:absolute;" ).removeAttr( "style" ).attr( "style" ), undefined, "Check removing style attribute" ); + assert.equal( jQuery( "#form" ).attr( "style", "position:absolute;" ).removeAttr( "style" ).attr( "style" ), undefined, "Check removing style attribute on a form" ); +@@ -692,7 +692,7 @@ + assert.equal( jQuery( "#select2" ).prop( "selectedIndex" ), 3, "Check for selectedIndex attribute" ); + assert.equal( jQuery( "#foo" ).prop( "nodeName" ).toUpperCase(), "DIV", "Check for nodeName attribute" ); + assert.equal( jQuery( "#foo" ).prop( "tagName" ).toUpperCase(), "DIV", "Check for tagName attribute" ); +- assert.equal( jQuery( "<option/>" ).prop( "selected" ), false, "Check selected attribute on disconnected element." ); ++ assert.equal( jQuery( "<option></option>" ).prop( "selected" ), false, "Check selected attribute on disconnected element." ); + + assert.equal( jQuery( "#listWithTabIndex" ).prop( "tabindex" ), 5, "Check retrieving tabindex" ); + jQuery( "#text1" ).prop( "readonly", true ); +@@ -837,16 +837,16 @@ + + function addOptions( $elem ) { + return $elem.append( +- jQuery( "<option/>" ).val( "a" ).text( "One" ), +- jQuery( "<option/>" ).val( "b" ).text( "Two" ), +- jQuery( "<option/>" ).val( "c" ).text( "Three" ) ++ jQuery( "<option></option>" ).val( "a" ).text( "One" ), ++ jQuery( "<option></option>" ).val( "b" ).text( "Two" ), ++ jQuery( "<option></option>" ).val( "c" ).text( "Three" ) + ) + .find( "[value=a]" ).prop( "selected", true ).end() + .find( "[value=c]" ).prop( "selected", true ).end(); + } + + var $optgroup, +- $select = jQuery( "<select/>" ); ++ $select = jQuery( "<select></select>" ); + + // Check select with options + addOptions( $select ).appendTo( "#qunit-fixture" ); +@@ -856,7 +856,7 @@ + $select.empty(); + + // Check select with optgroup +- $optgroup = jQuery( "<optgroup/>" ); ++ $optgroup = jQuery( "<optgroup></optgroup>" ); + addOptions( $optgroup ).appendTo( $select ); + $select.find( "[value=b]" ).prop( "selected", true ); + +@@ -970,7 +970,7 @@ + assert.equal( $button.val(), "foobar", "Value retrieval on a button does not return innerHTML" ); + assert.equal( $button.val( "baz" ).html(), "text", "Setting the value does not change innerHTML" ); + +- assert.equal( jQuery( "<option/>" ).val( "test" ).attr( "value" ), "test", "Setting value sets the value attribute" ); ++ assert.equal( jQuery( "<option></option>" ).val( "test" ).attr( "value" ), "test", "Setting value sets the value attribute" ); + } ); + + QUnit.test( "val() with non-matching values on dropdown list", function( assert ) { +@@ -1029,7 +1029,7 @@ + assert.equal( document.getElementById( "text1" ).value, "", "Check for modified (via val(null)) value of input element" ); + + var j, +- $select = jQuery( "<select multiple><option value='1'/><option value='2'/></select>" ), ++ $select = jQuery( "<select multiple><option value='1'></option><option value='2'></option></select>" ), + $select1 = jQuery( "#select1" ); + + $select1.val( valueObj( "3" ) ); +@@ -1145,7 +1145,7 @@ + QUnit.test( "select.val(space characters) (gh-2978)", function( assert ) { + assert.expect( 37 ); + +- var $select = jQuery( "<select/>" ).appendTo( "#qunit-fixture" ), ++ var $select = jQuery( "<select></select>" ).appendTo( "#qunit-fixture" ), + spaces = { + "\\t": { + html: "	", +@@ -1230,7 +1230,7 @@ + j.addClass( valueObj( "asdf" ) ); + assert.ok( j.hasClass( "asdf" ), "Check node,textnode,comment for addClass" ); + +- div = jQuery( "<div/>" ); ++ div = jQuery( "<div></div>" ); + + div.addClass( valueObj( "test" ) ); + assert.equal( div.attr( "class" ), "test", "Make sure there's no extra whitespace." ); +@@ -1669,9 +1669,9 @@ + assert.expect( 1 ); + + var area, +- map = jQuery( "<map />" ); ++ map = jQuery( "<map></map>" ); + +- area = map.html( "<area shape='rect' coords='0,0,0,0' href='#' alt='a' />" ).find( "area" ); ++ area = map.html( "<area shape='rect' coords='0,0,0,0' href='#' alt='a'></area>" ).find( "area" ); + assert.equal( area.attr( "coords" ), "0,0,0,0", "did not retrieve coords correctly" ); + } ); + +@@ -1679,7 +1679,7 @@ + assert.expect( 1 ); + + try { +- jQuery( "<option/>" ).val(); ++ jQuery( "<option></option>" ).val(); + assert.ok( true ); + } catch ( _ ) { + assert.ok( false ); +--- a/test/unit/basic.js ++++ b/test/unit/basic.js +@@ -36,7 +36,7 @@ + QUnit.test( "attributes", function( assert ) { + assert.expect( 6 ); + +- var a = jQuery( "<a/>" ).appendTo( "#qunit-fixture" ), ++ var a = jQuery( "<a></a>" ).appendTo( "#qunit-fixture" ), + input = jQuery( "<input/>" ).appendTo( "#qunit-fixture" ); + + assert.strictEqual( a.attr( "foo", "bar" ).attr( "foo" ), "bar", ".attr getter/setter" ); +@@ -56,7 +56,7 @@ + QUnit.test( "css", function( assert ) { + assert.expect( 1 ); + +- var div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ); ++ var div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ); + + assert.strictEqual( div.css( "width", "50px" ).css( "width" ), "50px", ".css getter/setter" ); + } ); +@@ -66,7 +66,7 @@ + QUnit.test( "show/hide", function( assert ) { + assert.expect( 2 ); + +- var div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ); ++ var div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ); + + div.hide(); + assert.strictEqual( div.css( "display" ), "none", "div hidden" ); +@@ -127,7 +127,7 @@ + QUnit.test( "data", function( assert ) { + assert.expect( 4 ); + +- var elem = jQuery( "<div data-c='d'/>" ).appendTo( "#qunit-fixture" ); ++ var elem = jQuery( "<div data-c='d'></div>" ).appendTo( "#qunit-fixture" ); + + assert.ok( !jQuery.hasData( elem[ 0 ] ), "jQuery.hasData - false" ); + assert.strictEqual( elem.data( "a", "b" ).data( "a" ), "b", ".data getter/setter" ); +@@ -139,7 +139,7 @@ + assert.expect( 3 ); + + var elem = jQuery( +- "<div style='margin: 10px; padding: 7px; border: 2px solid black;' /> " ++ "<div style='margin: 10px; padding: 7px; border: 2px solid black;'></div> " + ).appendTo( "#qunit-fixture" ); + + assert.strictEqual( elem.width( 50 ).width(), 50, ".width getter/setter" ); +@@ -150,7 +150,7 @@ + QUnit.test( "event", function( assert ) { + assert.expect( 1 ); + +- var elem = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ); ++ var elem = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ); + + elem + .on( "click", function() { +@@ -169,12 +169,12 @@ + + var child, + elem1 = jQuery( "<div><span></span></div>" ).appendTo( "#qunit-fixture" ), +- elem2 = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ); ++ elem2 = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ); + + assert.strictEqual( elem1.text( "foo" ).text(), "foo", ".html getter/setter" ); + + assert.strictEqual( +- elem1.html( "<span/>" ).html(), ++ elem1.html( "<span></span>" ).html(), + "<span></span>", + ".html getter/setter" + ); +@@ -183,8 +183,8 @@ + assert.strictEqual( elem1.prepend( elem2 )[ 0 ].childNodes[ 0 ], elem2[ 0 ], ".prepend" ); + + child = elem1.find( "span" ); +- child.after( "<a/>" ); +- child.before( "<b/>" ); ++ child.after( "<a></a>" ); ++ child.before( "<b></b>" ); + + assert.strictEqual( + elem1.html(), +@@ -196,8 +196,8 @@ + QUnit.test( "offset", function( assert ) { + assert.expect( 3 ); + +- var parent = jQuery( "<div style='position:fixed;top:20px;'/>" ).appendTo( "#qunit-fixture" ), +- elem = jQuery( "<div style='position:absolute;top:5px;'/>" ).appendTo( parent ); ++ var parent = jQuery( "<div style='position:fixed;top:20px;'></div>" ).appendTo( "#qunit-fixture" ), ++ elem = jQuery( "<div style='position:absolute;top:5px;'></div>" ).appendTo( parent ); + + assert.strictEqual( elem.offset().top, 25, ".offset getter" ); + assert.strictEqual( elem.position().top, 5, ".position getter" ); +--- a/test/unit/core.js ++++ b/test/unit/core.js +@@ -23,9 +23,9 @@ + + var elem, i, + obj = jQuery( "div" ), +- code = jQuery( "<code/>" ), ++ code = jQuery( "<code></code>" ), + img = jQuery( "<img/>" ), +- div = jQuery( "<div/><hr/><code/><b/>" ), ++ div = jQuery( "<div></div><hr/><code></code><b/>" ), + exec = false, + expected = 23, + attrObj = { +@@ -113,7 +113,7 @@ + elem = jQuery( "\n\n<em>world</em>" )[ 0 ]; + assert.equal( elem.nodeName.toLowerCase(), "em", "leading newlines" ); + +- elem = jQuery( "<div/>", attrObj ); ++ elem = jQuery( "<div></div>", attrObj ); + + if ( jQuery.fn.width ) { + assert.equal( elem[ 0 ].style.width, "10px", "jQuery() quick setter width" ); +@@ -428,7 +428,7 @@ + + assert.ok( jQuery( "<link rel='stylesheet'/>" )[ 0 ], "Creating a link" ); + +- assert.ok( !jQuery( "<script/>" )[ 0 ].parentNode, "Create a script" ); ++ assert.ok( !jQuery( "<script></script>" )[ 0 ].parentNode, "Create a script" ); + + assert.ok( jQuery( "<input/>" ).attr( "type", "hidden" ), "Create an input and set the type." ); + +@@ -496,8 +496,8 @@ + QUnit.test( "jQuery('html', context)", function( assert ) { + assert.expect( 1 ); + +- var $div = jQuery( "<div/>" )[ 0 ], +- $span = jQuery( "<span/>", $div ); ++ var $div = jQuery( "<div></div>" )[ 0 ], ++ $span = jQuery( "<span></span>", $div ); + assert.equal( $span.length, 1, "verify a span created with a div context works, #1763" ); + } ); + +@@ -1296,7 +1296,7 @@ + assert.equal( jQuery.parseHTML( "text" )[ 0 ].nodeType, 3, "Parsing text returns a text node" ); + assert.equal( jQuery.parseHTML( "\t<div></div>" )[ 0 ].nodeValue, "\t", "Preserve leading whitespace" ); + +- assert.equal( jQuery.parseHTML( " <div/> " )[ 0 ].nodeType, 3, "Leading spaces are treated as text nodes (#11290)" ); ++ assert.equal( jQuery.parseHTML( " <div></div> " )[ 0 ].nodeType, 3, "Leading spaces are treated as text nodes (#11290)" ); + + html = jQuery.parseHTML( "<div>test div</div>" ); + +--- a/test/unit/css.js ++++ b/test/unit/css.js +@@ -13,7 +13,7 @@ + assert.notEqual( $child.css( "width" ), "20px", "Retrieving a width percentage on the child of a hidden div returns percentage" ); + assert.notEqual( $child.css( "height" ), "20px", "Retrieving a height percentage on the child of a hidden div returns percentage" ); + +- div = jQuery( "<div/>" ); ++ div = jQuery( "<div></div>" ); + + // These should be "auto" (or some better value) + // temporarily provide "0px" for backwards compat +@@ -25,7 +25,7 @@ + assert.equal( div.css( "width" ), "4px", "Width on disconnected node." ); + assert.equal( div.css( "height" ), "4px", "Height on disconnected node." ); + +- div2 = jQuery( "<div style='display:none;'><input type='text' style='height:20px;'/><textarea style='height:20px;'/><div style='height:20px;'></div></div>" ).appendTo( "body" ); ++ div2 = jQuery( "<div style='display:none;'><input type='text' style='height:20px;'/><textarea style='height:20px;'></textarea><div style='height:20px;'></div></div>" ).appendTo( "body" ); + + assert.equal( div2.find( "input" ).css( "height" ), "20px", "Height on hidden input." ); + assert.equal( div2.find( "textarea" ).css( "height" ), "20px", "Height on hidden textarea." ); +@@ -42,7 +42,7 @@ + assert.equal( parseFloat( jQuery( "#nothiddendiv" ).css( "width" ) ), 0, "Test negative width set to 0" ); + assert.equal( parseFloat( jQuery( "#nothiddendiv" ).css( "height" ) ), 0, "Test negative height set to 0" ); + +- assert.equal( jQuery( "<div style='display: none;'/>" ).css( "display" ), "none", "Styles on disconnected nodes" ); ++ assert.equal( jQuery( "<div style='display: none;'></div>" ).css( "display" ), "none", "Styles on disconnected nodes" ); + + jQuery( "#floatTest" ).css( { "float": "right" } ); + assert.equal( jQuery( "#floatTest" ).css( "float" ), "right", "Modified CSS float using \"float\": Assert float is right" ); +@@ -111,7 +111,7 @@ + + assert.strictEqual( child.css( "x-fake" ), undefined, "Make sure undefined is returned from css(nonexistent)." ); + +- div = jQuery( "<div/>" ).css( { position: "absolute", "z-index": 1000 } ).appendTo( "#qunit-fixture" ); ++ div = jQuery( "<div></div>" ).css( { position: "absolute", "z-index": 1000 } ).appendTo( "#qunit-fixture" ); + assert.strictEqual( div.css( "z-index" ), "1000", + "Make sure that a string z-index is returned from css('z-index') (#14432)." ); + } ); +@@ -275,10 +275,10 @@ + assert.expect( 1 ); + + var right, +- $container = jQuery( "<div/>" ) ++ $container = jQuery( "<div></div>" ) + .css( { position: "absolute", width: "400px", fontSize: "4px" } ) + .appendTo( "#qunit-fixture" ), +- $el = jQuery( "<div/>" ) ++ $el = jQuery( "<div></div>" ) + .css( { position: "absolute", left: "50%", right: "50%" } ) + .appendTo( $container ); + +@@ -574,7 +574,7 @@ + assert.equal( div.css( "display" ), "none", + "A shown-while-detached div inside a visible div can be hidden by the CSS cascade" ); + +- span = jQuery( "<span class='hidden'/>" ); ++ span = jQuery( "<span class='hidden'></span>" ); + span.show().appendTo( "#qunit-fixture" ); + assert.equal( span.css( "display" ), "none", + "A shown-while-detached span can be hidden by the CSS cascade" ); +@@ -588,7 +588,7 @@ + "A shown-while-detached cascade-hidden div is hidden after attachment" ); + div.remove(); + +- span = jQuery( "<span class='hidden'/>" ); ++ span = jQuery( "<span class='hidden'></span>" ); + span.appendTo( "#qunit-fixture" ).detach().show().appendTo( "#qunit-fixture" ); + assert.equal( span.css( "display" ), "none", + "A shown-while-detached cascade-hidden span is hidden after attachment" ); +@@ -615,7 +615,7 @@ + "A shown-while-detached inline-hidden div inside a visible div has default display " + + "after attachment" ); + +- span = jQuery( "<span style='display: none'/>" ); ++ span = jQuery( "<span style='display: none'></span>" ); + span.show(); + assert.equal( span[ 0 ].style.display, "", + "show() updates inline style of a detached inline-hidden span" ); +@@ -623,20 +623,20 @@ + assert.equal( span.css( "display" ), "inline", + "A shown-while-detached inline-hidden span has default display after attachment" ); + +- div = jQuery( "<div style='display: inline'/>" ); ++ div = jQuery( "<div style='display: inline'></div>" ); + div.show().appendTo( "#qunit-fixture" ); + assert.equal( div.css( "display" ), "inline", + "show() does not update inline style of a detached inline-visible div" ); + div.remove(); + +- tr = jQuery( "<tr/>" ); ++ tr = jQuery( "<tr></tr>" ); + jQuery( "#table" ).append( tr ); + tr.detach().hide().show(); + + assert.ok( !tr[ 0 ].style.display, "Not-hidden detached tr elements have no inline style" ); + tr.remove(); + +- span = jQuery( "<span/>" ).hide().show(); ++ span = jQuery( "<span></span>" ).hide().show(); + assert.ok( !span[ 0 ].style.display, "Not-hidden detached span elements have no inline style" ); + span.remove(); + } ); +@@ -657,7 +657,7 @@ + QUnit.test( "show() after hide() should always set display to initial value (#14750)", function( assert ) { + assert.expect( 1 ); + +- var div = jQuery( "<div />" ), ++ var div = jQuery( "<div></div>" ), + fixture = jQuery( "#qunit-fixture" ); + + fixture.append( div ); +@@ -671,11 +671,11 @@ + assert.expect( 36 ); + + var i, +- $elems = jQuery( "<div/>" ) ++ $elems = jQuery( "<div></div>" ) + .appendTo( "#qunit-fixture" ) +- .html( "<div data-expected-display='block'/>" + +- "<span data-expected-display='inline'/>" + +- "<ul><li data-expected-display='list-item'/></ul>" ) ++ .html( "<div data-expected-display='block'></div>" + ++ "<span data-expected-display='inline'></span>" + ++ "<ul><li data-expected-display='list-item'></li></ul>" ) + .find( "[data-expected-display]" ); + + $elems.each( function() { +@@ -729,9 +729,9 @@ + assert.expect( 36 ); + + var i, +- $elems = jQuery( "<div/>" ) ++ $elems = jQuery( "<div></div>" ) + .appendTo( "#qunit-fixture" ) +- .html( "<span class='block'/><div class='inline'/><div class='list-item'/>" ) ++ .html( "<span class='block'></span><div class='inline'></div><div class='list-item'></div>" ) + .children(); + + $elems.each( function() { +@@ -768,17 +768,17 @@ + assert.expect( 96 ); + + var i, +- $elems = jQuery( "<div/>" ) ++ $elems = jQuery( "<div></div>" ) + .appendTo( "#qunit-fixture" ) +- .html( "<span data-expected-display='block' style='display:block'/>" + +- "<span class='list-item' data-expected-display='block' style='display:block'/>" + +- "<div data-expected-display='inline' style='display:inline'/>" + +- "<div class='list-item' data-expected-display='inline' style='display:inline'/>" + ++ .html( "<span data-expected-display='block' style='display:block'></span>" + ++ "<span class='list-item' data-expected-display='block' style='display:block'></span>" + ++ "<div data-expected-display='inline' style='display:inline'></div>" + ++ "<div class='list-item' data-expected-display='inline' style='display:inline'></div>" + + "<ul>" + +- "<li data-expected-display='block' style='display:block'/>" + +- "<li class='inline' data-expected-display='block' style='display:block'/>" + +- "<li data-expected-display='inline' style='display:inline'/>" + +- "<li class='block' data-expected-display='inline' style='display:inline'/>" + ++ "<li data-expected-display='block' style='display:block'></li>" + ++ "<li class='inline' data-expected-display='block' style='display:block'></li>" + ++ "<li data-expected-display='inline' style='display:inline'></li>" + ++ "<li class='block' data-expected-display='inline' style='display:inline'></li>" + + "</ul>" ) + .find( "[data-expected-display]" ); + +@@ -817,15 +817,15 @@ + assert.expect( 72 ); + + var i, +- $elems = jQuery( "<div/>" ) ++ $elems = jQuery( "<div></div>" ) + .appendTo( "#qunit-fixture" ) +- .html( "<div class='hidden' data-expected-display='block'/>" + +- "<div class='hidden' data-expected-display='block' style='display:none'/>" + +- "<span class='hidden' data-expected-display='inline'/>" + +- "<span class='hidden' data-expected-display='inline' style='display:none'/>" + ++ .html( "<div class='hidden' data-expected-display='block'></div>" + ++ "<div class='hidden' data-expected-display='block' style='display:none'></div>" + ++ "<span class='hidden' data-expected-display='inline'></span>" + ++ "<span class='hidden' data-expected-display='inline' style='display:none'></span>" + + "<ul>" + +- "<li class='hidden' data-expected-display='list-item'/>" + +- "<li class='hidden' data-expected-display='list-item' style='display:none'/>" + ++ "<li class='hidden' data-expected-display='list-item'></li>" + ++ "<li class='hidden' data-expected-display='list-item' style='display:none'></li>" + + "</ul>" ) + .find( "[data-expected-display]" ); + +@@ -864,16 +864,16 @@ + assert.expect( 84 ); + + var i, +- $elems = jQuery( "<div/>" ) ++ $elems = jQuery( "<div></div>" ) + .appendTo( "#qunit-fixture" ) +- .html( "<span data-expected-display='inline' style='display:none'/>" + +- "<span class='list-item' data-expected-display='list-item' style='display:none'/>" + +- "<div data-expected-display='block' style='display:none'/>" + +- "<div class='list-item' data-expected-display='list-item' style='display:none'/>" + ++ .html( "<span data-expected-display='inline' style='display:none'></span>" + ++ "<span class='list-item' data-expected-display='list-item' style='display:none'></span>" + ++ "<div data-expected-display='block' style='display:none'></div>" + ++ "<div class='list-item' data-expected-display='list-item' style='display:none'></div>" + + "<ul>" + +- "<li data-expected-display='list-item' style='display:none'/>" + +- "<li class='block' data-expected-display='block' style='display:none'/>" + +- "<li class='inline' data-expected-display='inline' style='display:none'/>" + ++ "<li data-expected-display='list-item' style='display:none'></li>" + ++ "<li class='block' data-expected-display='block' style='display:none'></li>" + ++ "<li class='inline' data-expected-display='inline' style='display:none'></li>" + + "</ul>" ) + .find( "[data-expected-display]" ); + +@@ -944,9 +944,9 @@ + + QUnit[ jQuery.find.compile && jQuery.fn.toggle ? "test" : "skip" ]( "detached toggle()", function( assert ) { + assert.expect( 6 ); +- var detached = jQuery( "<p><a/><p>" ).find( "*" ).addBack(), +- hiddenDetached = jQuery( "<p><a/></p>" ).find( "*" ).addBack().css( "display", "none" ), +- cascadeHiddenDetached = jQuery( "<p><a/></p>" ).find( "*" ).addBack().addClass( "hidden" ); ++ var detached = jQuery( "<p><a></a><p>" ).find( "*" ).addBack(), ++ hiddenDetached = jQuery( "<p><a></a></p>" ).find( "*" ).addBack().css( "display", "none" ), ++ cascadeHiddenDetached = jQuery( "<p><a></a></p>" ).find( "*" ).addBack().addClass( "hidden" ); + + detached.toggle(); + detached.appendTo( "#qunit-fixture" ); +@@ -1020,9 +1020,9 @@ + QUnit.test( "box model properties incorrectly returning % instead of px, see #10639 and #12088", function( assert ) { + assert.expect( 2 ); + +- var container = jQuery( "<div/>" ).width( 400 ).appendTo( "#qunit-fixture" ), +- el = jQuery( "<div/>" ).css( { "width": "50%", "marginRight": "50%" } ).appendTo( container ), +- el2 = jQuery( "<div/>" ).css( { "width": "50%", "minWidth": "300px", "marginLeft": "25%" } ).appendTo( container ); ++ var container = jQuery( "<div></div>" ).width( 400 ).appendTo( "#qunit-fixture" ), ++ el = jQuery( "<div></div>" ).css( { "width": "50%", "marginRight": "50%" } ).appendTo( container ), ++ el2 = jQuery( "<div></div>" ).css( { "width": "50%", "minWidth": "300px", "marginLeft": "25%" } ).appendTo( container ); + + assert.equal( el.css( "marginRight" ), "200px", "css('marginRight') returning % instead of px, see #10639" ); + assert.equal( el2.css( "marginLeft" ), "100px", "css('marginLeft') returning incorrect pixel value, see #12088" ); +@@ -1066,10 +1066,10 @@ + assert.expect( 2 ); + var span, div; + +- span = jQuery( "<span/>" ).css( "background-image", "url(" + baseURL + "1x1.jpg)" ); ++ span = jQuery( "<span></span>" ).css( "background-image", "url(" + baseURL + "1x1.jpg)" ); + assert.notEqual( span.css( "background-image" ), null, "can't get background-image in IE<9, see #10254" ); + +- div = jQuery( "<div/>" ).css( "top", 10 ); ++ div = jQuery( "<div></div>" ).css( "top", 10 ); + assert.equal( div.css( "top" ), "10px", "can't get top in IE<9, see #8388" ); + } ); + +@@ -1084,7 +1084,7 @@ + } ); + + QUnit.test( "can't get background-position in IE<9, see #10796", function( assert ) { +- var div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ), ++ var div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ), + units = [ + "0 0", + "12px 12px", +@@ -1468,7 +1468,7 @@ + QUnit.test( "Don't append px to CSS \"order\" value (#14049)", function( assert ) { + assert.expect( 1 ); + +- var $elem = jQuery( "<div/>" ); ++ var $elem = jQuery( "<div></div>" ); + + $elem.css( "order", 2 ); + assert.equal( $elem.css( "order" ), "2", "2 on order" ); +@@ -1547,7 +1547,7 @@ + resetCssPropsFor( "appearance" ); + resetCssPropsFor( "transform" ); + +- elem = jQuery( "<div/>" ) ++ elem = jQuery( "<div></div>" ) + .css( { + msAppearance: "none", + appearance: "none", +@@ -1571,7 +1571,7 @@ + QUnit.test( "Don't detect fake set properties on a node when caching the prefixed version", function( assert ) { + assert.expect( 1 ); + +- var elem = jQuery( "<div/>" ), ++ var elem = jQuery( "<div></div>" ), + style = elem[ 0 ].style; + style.MozFakeProperty = "old value"; + elem.css( "fakeProperty", "new value" ); +--- a/test/unit/data.js ++++ b/test/unit/data.js +@@ -427,7 +427,7 @@ + assert.expect( 4 ); + + var obj, jqobj, +- div = jQuery( "<div/>" ); ++ div = jQuery( "<div></div>" ); + + div.data( { "test": "in", "test2": "in2" } ); + assert.equal( div.data( "test" ), "in", "Verify setting an object in data" ); +@@ -556,7 +556,7 @@ + + assert.expect( 2 ); + +- var div = jQuery( "<div/>", { id: "hyphened" } ).appendTo( "#qunit-fixture" ), ++ var div = jQuery( "<div></div>", { id: "hyphened" } ).appendTo( "#qunit-fixture" ), + test = { + "camelBar": "camelBar", + "hyphen-foo": "hyphen-foo" +@@ -573,7 +573,7 @@ + + assert.expect( 1 ); + +- var div = jQuery( "<div/>" ); ++ var div = jQuery( "<div></div>" ); + + div.data( "foo-bar", "baz" ); + +@@ -585,14 +585,14 @@ + + var a, b; + +- a = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ); ++ a = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ); + + a.attr( "data-long-param", "test" ); + a.data( "long-param", { a: 2 } ); + + assert.deepEqual( a.data( "long-param" ), { a: 2 }, "data with property long-param was found, 1" ); + +- b = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ); ++ b = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ); + + b.attr( "data-long-param", "test" ); + b.data( "long-param" ); +@@ -668,7 +668,7 @@ + + QUnit.test( ".data supports interoperable hyphenated/camelCase get/set of properties with arbitrary non-null|NaN|undefined values", function( assert ) { + +- var div = jQuery( "<div/>", { id: "hyphened" } ).appendTo( "#qunit-fixture" ), ++ var div = jQuery( "<div></div>", { id: "hyphened" } ).appendTo( "#qunit-fixture" ), + datas = { + "non-empty": { + key: "nonEmpty", +@@ -736,7 +736,7 @@ + } ); + + QUnit.test( ".data supports interoperable removal of hyphenated/camelCase properties", function( assert ) { +- var div = jQuery( "<div/>", { id: "hyphened" } ).appendTo( "#qunit-fixture" ), ++ var div = jQuery( "<div></div>", { id: "hyphened" } ).appendTo( "#qunit-fixture" ), + datas = { + "non-empty": "a string", + "empty-string": "", +@@ -934,7 +934,7 @@ + assert.expect( 2 ); + + var key, +- div = jQuery( "<div/>" ); ++ div = jQuery( "<div></div>" ); + div.data( "some", "data" ); + assert.equal( div.data( "some" ), "data", "Data is added" ); + div.removeData( "some" ); +@@ -968,7 +968,7 @@ + assert.expect( 1 ); + + var key, +- div = jQuery( "<div/>" ); ++ div = jQuery( "<div></div>" ); + + div.data( "foo" ); + assert.equal( jQuery.hasData( div[ 0 ] ), false, "No data exists after access" ); +--- a/test/unit/deprecated.js ++++ b/test/unit/deprecated.js +@@ -102,7 +102,7 @@ + QUnit[ jQuery.fn.click ? "test" : "skip" ]( "Event aliases", function( assert ) { + + // Explicitly skipping focus/blur events due to their flakiness +- var $elem = jQuery( "<div />" ).appendTo( "#qunit-fixture" ), ++ var $elem = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ), + aliases = ( "resize scroll click dblclick mousedown mouseup " + + "mousemove mouseover mouseout mouseenter mouseleave change " + + "select submit keydown keypress keyup contextmenu" ).split( " " ); +--- a/test/unit/dimensions.js ++++ b/test/unit/dimensions.js +@@ -342,7 +342,7 @@ + QUnit.test( "table dimensions", function( assert ) { + assert.expect( 2 ); + +- var table = jQuery( "<table><colgroup><col/><col/></colgroup><tbody><tr><td></td><td>a</td></tr><tr><td></td><td>a</td></tr></tbody></table>" ).appendTo( "#qunit-fixture" ), ++ var table = jQuery( "<table><colgroup><col></col><col></col></colgroup><tbody><tr><td></td><td>a</td></tr><tr><td></td><td>a</td></tr></tbody></table>" ).appendTo( "#qunit-fixture" ), + tdElem = table.find( "td" ).first(), + colElem = table.find( "col" ).first().width( 300 ); + +@@ -476,7 +476,7 @@ + assert.expect( 1 ); + + var offsetTop, +- element = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ); ++ element = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ); + + element.offset( function( index, coords ) { + coords.top = 100; +@@ -523,7 +523,7 @@ + + assert.expect( 2 ); + +- var $elem = jQuery( "<div style='width: 200px; height: 200px; transform: scale(2);' />" ) ++ var $elem = jQuery( "<div style='width: 200px; height: 200px; transform: scale(2);'></div>" ) + .appendTo( "#qunit-fixture" ); + + assert.equal( $elem.width(), 200, "Width ignores transforms" ); +@@ -596,14 +596,14 @@ + return old + adjustment; + }; + }, +- parent = jQuery( "<div/>" ) ++ parent = jQuery( "<div></div>" ) + .css( { position: "absolute", width: "1000px", height: "1000px" } ) + .appendTo( "#qunit-fixture" ), + fraction = jQuery( "<div style='width:4.5px;'/>" ).appendTo( parent ).width() % 1, + borderWidth = 1, + padding = 2, + size = 100 + fraction, +- plainBox = jQuery( "<div />" ) ++ plainBox = jQuery( "<div></div>" ) + .css( { + "box-sizing": "content-box", + position: "absolute", +--- a/test/unit/effects.js ++++ b/test/unit/effects.js +@@ -570,7 +570,7 @@ + } ); + this.clock.tick( 200 ); + +- $elem = jQuery( "<div />" ); ++ $elem = jQuery( "<div></div>" ); + $elem.show( 0, function() { + assert.ok( true, "Show callback with no duration" ); + } ); +@@ -1256,7 +1256,7 @@ + QUnit.test( "hide hidden elements, with animation (bug #7141)", function( assert ) { + assert.expect( 4 ); + +- var div = jQuery( "<div id='bug7141' style='display:none'/>" ).appendTo( "#qunit-fixture" ); ++ var div = jQuery( "<div id='bug7141' style='display:none'></div>" ).appendTo( "#qunit-fixture" ); + assert.equal( div.css( "display" ), "none", "Element is initially hidden" ); + div.hide( 10, function() { + assert.equal( div.css( "display" ), "none", "Element is hidden in .hide() callback" ); +@@ -1557,10 +1557,10 @@ + toggle: [ 1 ], + slideToggle: [] + }, +- $divEmpty = jQuery( "<div/>" ), ++ $divEmpty = jQuery( "<div></div>" ), + $divTest = jQuery( "<div>test</div>" ), +- $divNone = jQuery( "<div style='display: none;'/>" ), +- $divInline = jQuery( "<div style='display: inline;'/>" ), ++ $divNone = jQuery( "<div style='display: none;'></div>" ), ++ $divInline = jQuery( "<div style='display: inline;'></div>" ), + nullParentDisplay = $divEmpty.css( "display" ), + underFragmentDisplay = $divTest.css( "display" ), + clock = this.clock; +@@ -1580,7 +1580,7 @@ + assert.expectJqData( env, $divNone[ 0 ], "olddisplay" ); + + jQuery.each( showMethods, function( name, opt ) { +- jQuery.fn[ name ].apply( jQuery( "<div/>" ), opt.concat( [ function() { ++ jQuery.fn[ name ].apply( jQuery( "<div></div>" ), opt.concat( [ function() { + assert.strictEqual( jQuery( this ).css( "display" ), nullParentDisplay, + "." + name + " block with null parentNode" ); + } ] ) ); +@@ -1591,7 +1591,7 @@ + } ] ) ); + } ); + jQuery.each( toggleMethods, function( name, opt ) { +- jQuery.fn[ name ].apply( jQuery( "<div/>" ), opt.concat( [ function() { ++ jQuery.fn[ name ].apply( jQuery( "<div></div>" ), opt.concat( [ function() { + assert.strictEqual( jQuery( this ).css( "display" ), "none", + "." + name + " block with null parentNode" ); + } ] ) ); +@@ -2315,8 +2315,8 @@ + assert.expect( 2 ); + + var clock = this.clock, +- fromStyleSheet = jQuery( "<span id='span-14824' />" ), +- fromStyleAttr = jQuery( "<span style='display: block;' />" ); ++ fromStyleSheet = jQuery( "<span id='span-14824'></span>" ), ++ fromStyleAttr = jQuery( "<span style='display: block;'></span>" ); + + jQuery( "#qunit-fixture" ).append( fromStyleSheet, fromStyleAttr ); + +@@ -2416,7 +2416,7 @@ + QUnit.test( "Display value is correct for disconnected nodes (trac-13310)", function( assert ) { + assert.expect( 3 ); + +- var div = jQuery( "<div/>" ); ++ var div = jQuery( "<div></div>" ); + + assert.equal( div.css( "display", "inline" ).hide().show().appendTo( "body" ).css( "display" ), "inline", "Initialized display value has returned" ); + div.remove(); +@@ -2437,7 +2437,7 @@ + + var clock = this.clock; + +- jQuery( "<span/><div style='display:inline' title='inline div'/>" ).each( function() { ++ jQuery( "<span></span><div style='display:inline' title='inline div'></div>" ).each( function() { + var completed, interrupted, + N = 100, + fixture = jQuery( "#qunit-fixture" ), +--- a/test/unit/event.js ++++ b/test/unit/event.js +@@ -153,7 +153,7 @@ + var cur, div, + obj = {}; + +- div = jQuery( "<div/>" ).on( "focusin.a", function( e ) { ++ div = jQuery( "<div></div>" ).on( "focusin.a", function( e ) { + assert.equal( e.type, cur, "Verify right single event was fired." ); + } ); + +@@ -163,7 +163,7 @@ + // manually clean up detached elements + div.remove(); + +- div = jQuery( "<div/>" ).on( "click mouseover", obj, function( e ) { ++ div = jQuery( "<div></div>" ).on( "click mouseover", obj, function( e ) { + assert.equal( e.type, cur, "Verify right multi event was fired." ); + assert.equal( e.data, obj, "Make sure the data came in correctly." ); + } ); +@@ -177,7 +177,7 @@ + // manually clean up detached elements + div.remove(); + +- div = jQuery( "<div/>" ).on( "focusin.a focusout.b", function( e ) { ++ div = jQuery( "<div></div>" ).on( "focusin.a focusout.b", function( e ) { + assert.equal( e.type, cur, "Verify right multi event was fired." ); + } ); + +@@ -195,7 +195,7 @@ + assert.expect( 27 ); + + var i = 0, +- div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ).on( "test", function() { ++ div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ).on( "test", function() { + assert.ok( true, "Test event fired." ); + } ); + +@@ -244,7 +244,7 @@ + // Should trigger 4 + div.off( "test" ); + +- div = jQuery( "<div/>" ).on( "test", function() { ++ div = jQuery( "<div></div>" ).on( "test", function() { + assert.ok( true, "Test event fired." ); + } ); + +@@ -876,7 +876,7 @@ + assert.expect( 1 ); + + var count = 0, +- elem = jQuery( "<a />" ); ++ elem = jQuery( "<a></a>" ); + elem.on( "mouseenter", function() { + count++; + } ); +@@ -890,7 +890,7 @@ + assert.expect( 1 ); + + var count = 0, +- elem = jQuery( "<a />" ); ++ elem = jQuery( "<a></a>" ); + elem.on( "pointerenter", function() { + count++; + } ); +@@ -1075,7 +1075,7 @@ + var $formByClone, $formByHTML, + $testForm = jQuery( "#testForm" ), + $fixture = jQuery( "#qunit-fixture" ), +- $wrapperDiv = jQuery( "<div/>" ).appendTo( $fixture ); ++ $wrapperDiv = jQuery( "<div></div>" ).appendTo( $fixture ); + + function noSubmit( e ) { + e.preventDefault(); +@@ -1111,7 +1111,7 @@ + var $formByClone, $formByHTML, + $form = jQuery( "#form" ), + $fixture = jQuery( "#qunit-fixture" ), +- $wrapperDiv = jQuery( "<div/>" ).appendTo( $fixture ); ++ $wrapperDiv = jQuery( "<div></div>" ).appendTo( $fixture ); + + function delegatedChange() { + assert.ok( true, "Make sure change event bubbles up." ); +@@ -1141,7 +1141,7 @@ + assert.expect( 28 ); + + var event, +- $parent = jQuery( "<div id='par' />" ).appendTo( "body" ), ++ $parent = jQuery( "<div id='par'></div>" ).appendTo( "body" ), + $child = jQuery( "<p id='child'>foo</p>" ).appendTo( $parent ); + + $parent.get( 0 ).style.display = "none"; +@@ -2723,7 +2723,7 @@ + assert.expect( 2 ); + + var key, +- div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ); ++ div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ); + + div.on( "click", false ); + div.on( "custom", function() { +--- a/test/unit/manipulation.js ++++ b/test/unit/manipulation.js +@@ -88,9 +88,9 @@ + assert.equal( $multipleElements.eq( 1 ).text(), expected, "text() updates multiple elements (#11809)" ); + + // Prevent memory leaks #11809 +- $childDiv = jQuery( "<div/>" ); ++ $childDiv = jQuery( "<div></div>" ); + $childDiv.data( "leak", true ); +- $parentDiv = jQuery( "<div/>" ); ++ $parentDiv = jQuery( "<div></div>" ); + $parentDiv.append( $childDiv ); + $parentDiv.text( "Dry off" ); + } +@@ -241,10 +241,10 @@ + assert.strictEqual( e.message || e, undefined, message ); + } + +- jQuery( "<fieldset/>" ).appendTo( "#form" ).append( valueObj( "<legend id='legend'>test</legend>" ) ); ++ jQuery( "<fieldset></fieldset>" ).appendTo( "#form" ).append( valueObj( "<legend id='legend'>test</legend>" ) ); + assert.t( "Append legend", "#legend", [ "legend" ] ); + +- $map = jQuery( "<map/>" ).append( valueObj( "<area id='map01' shape='rect' coords='50,50,150,150' href='http://www.jquery.com/' alt='jQuery'>" ) ); ++ $map = jQuery( "<map></map>" ).append( valueObj( "<area id='map01' shape='rect' coords='50,50,150,150' href='http://www.jquery.com/' alt='jQuery'>" ) ); + + assert.equal( $map[ 0 ].childNodes.length, 1, "The area was inserted." ); + assert.equal( $map[ 0 ].firstChild.nodeName.toLowerCase(), "area", "The area was inserted." ); +@@ -264,7 +264,7 @@ + assert.ok( jQuery.parseHTML( "<" + name + "/>" ).length, name + " wrapped correctly" ); + } ); + +- jQuery( "#table colgroup" ).append( valueObj( "<col/>" ) ); ++ jQuery( "#table colgroup" ).append( valueObj( "<col></col>" ) ); + assert.equal( jQuery( "#table colgroup col" ).length, 1, "Append col" ); + + jQuery( "#form" ) +@@ -272,12 +272,12 @@ + .append( valueObj( "<select id='appendSelect2'><option>Test</option></select>" ) ); + assert.t( "Append Select", "#appendSelect1, #appendSelect2", [ "appendSelect1", "appendSelect2" ] ); + +- assert.equal( "Two nodes", jQuery( "<div />" ).append( "Two", " nodes" ).text(), "Appending two text nodes (#4011)" ); +- assert.equal( jQuery( "<div />" ).append( "1", "", 3 ).text(), "13", "If median is false-like value, subsequent arguments should not be ignored" ); ++ assert.equal( "Two nodes", jQuery( "<div></div>" ).append( "Two", " nodes" ).text(), "Appending two text nodes (#4011)" ); ++ assert.equal( jQuery( "<div></div>" ).append( "1", "", 3 ).text(), "13", "If median is false-like value, subsequent arguments should not be ignored" ); + + // using contents will get comments regular, text, and comment nodes + j = jQuery( "#nonnodes" ).contents(); +- d = jQuery( "<div/>" ).appendTo( "#nonnodes" ).append( j ); ++ d = jQuery( "<div></div>" ).appendTo( "#nonnodes" ).append( j ); + + assert.equal( jQuery( "#nonnodes" ).length, 1, "Check node,textnode,comment append moved leaving just the div" ); + assert.equal( d.contents().length, 3, "Check node,textnode,comment append works" ); +@@ -294,12 +294,12 @@ + $radioChecked.trigger( "click" ); + $radioUnchecked[ 0 ].checked = false; + +- jQuery( "<div/>" ).insertBefore( $radioParent ).append( $radioParent ); ++ jQuery( "<div></div>" ).insertBefore( $radioParent ).append( $radioParent ); + + assert.equal( $radioChecked[ 0 ].checked, true, "Reappending radios uphold which radio is checked" ); + assert.equal( $radioUnchecked[ 0 ].checked, false, "Reappending radios uphold not being checked" ); + +- assert.equal( jQuery( "<div/>" ).append( valueObj( "option<area/>" ) )[ 0 ].childNodes.length, 2, "HTML-string with leading text should be processed correctly" ); ++ assert.equal( jQuery( "<div></div>" ).append( valueObj( "option<area></area>" ) )[ 0 ].childNodes.length, 2, "HTML-string with leading text should be processed correctly" ); + } + + QUnit.test( "append(String|Element|Array<Element>|jQuery)", function( assert ) { +@@ -672,7 +672,7 @@ + jQuery( "#select1" ).appendTo( "#foo" ); + assert.t( "Append select", "#foo select", [ "select1" ] ); + +- div = jQuery( "<div/>" ).on( "click", function() { ++ div = jQuery( "<div></div>" ).on( "click", function() { + assert.ok( true, "Running a cloned click." ); + } ); + div.appendTo( "#qunit-fixture, #moretests" ); +@@ -680,7 +680,7 @@ + jQuery( "#qunit-fixture div" ).last().trigger( "click" ); + jQuery( "#moretests div" ).last().trigger( "click" ); + +- div = jQuery( "<div/>" ).appendTo( "#qunit-fixture, #moretests" ); ++ div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture, #moretests" ); + + assert.equal( div.length, 2, "appendTo returns the inserted elements" ); + +@@ -689,7 +689,7 @@ + assert.ok( jQuery( "#qunit-fixture div" ).last().hasClass( "test" ), "appendTo element was modified after the insertion" ); + assert.ok( jQuery( "#moretests div" ).last().hasClass( "test" ), "appendTo element was modified after the insertion" ); + +- div = jQuery( "<div/>" ); ++ div = jQuery( "<div></div>" ); + jQuery( "<span>a</span><b>b</b>" ).filter( "span" ).appendTo( div ); + + assert.equal( div.children().length, 1, "Make sure the right number of children were inserted." ); +@@ -989,7 +989,7 @@ + assert.expect( 2 ); + + var set; +- set = jQuery( "<div/>" ).before( "<span>test</span>" ); ++ set = jQuery( "<div></div>" ).before( "<span>test</span>" ); + assert.equal( set[ 0 ].nodeName.toLowerCase(), "div", "Insert before a disconnected node should be a no-op" ); + assert.equal( set.length, 1, "Insert the element before the disconnected node. should be a no-op" ); + } ); +@@ -1008,8 +1008,8 @@ + + assert.expect( 2 ); + +- assert.equal( jQuery( "<input type='checkbox'/>" ).before( "<div/>" ).length, 1, "before() on disconnected node is no-op" ); +- assert.equal( jQuery( "<input type='checkbox'/>" ).after( "<div/>" ).length, 1, "after() on disconnected node is no-op" ); ++ assert.equal( jQuery( "<input type='checkbox'/>" ).before( "<div></div>" ).length, 1, "before() on disconnected node is no-op" ); ++ assert.equal( jQuery( "<input type='checkbox'/>" ).after( "<div></div>" ).length, 1, "after() on disconnected node is no-op" ); + } ); + + QUnit.test( "insert with .before() on disconnected node last", function( assert ) { +@@ -1018,7 +1018,7 @@ + + var expectedBefore = "This is a normal link: bugaYahoo"; + +- jQuery( "#yahoo" ).add( "<span/>" ).before( "<b>buga</b>" ); ++ jQuery( "#yahoo" ).add( "<span></span>" ).before( "<b>buga</b>" ); + assert.equal( jQuery( "#en" ).text(), expectedBefore, "Insert String before with disconnected node last" ); + } ); + +@@ -1028,7 +1028,7 @@ + + var expectedBefore = "This is a normal link: bugaYahoo"; + +- jQuery( "<span/>" ).add( "#yahoo" ).before( "<b>buga</b>" ); ++ jQuery( "<span></span>" ).add( "#yahoo" ).before( "<b>buga</b>" ); + assert.equal( jQuery( "#en" ).text(), expectedBefore, "Insert String before with disconnected node first" ); + } ); + +@@ -1038,7 +1038,7 @@ + + var expectedAfter = "This is a normal link: Yahoobuga"; + +- jQuery( "#yahoo" ).add( "<span/>" ).after( "<b>buga</b>" ); ++ jQuery( "#yahoo" ).add( "<span></span>" ).after( "<b>buga</b>" ); + assert.equal( jQuery( "#en" ).text(), expectedAfter, "Insert String after with disconnected node last" ); + } ); + +@@ -1048,7 +1048,7 @@ + + var expectedAfter = "This is a normal link: Yahoobuga"; + +- jQuery( "<span/>" ).add( "#yahoo" ).after( "<b>buga</b>" ); ++ jQuery( "<span></span>" ).add( "#yahoo" ).after( "<b>buga</b>" ); + assert.equal( jQuery( "#en" ).text(), expectedAfter, "Insert String after with disconnected node first" ); + } ); + +@@ -1168,7 +1168,7 @@ + + assert.expect( 2 ); + +- var set = jQuery( "<div/>" ).before( "<span>test</span>" ); ++ var set = jQuery( "<div></div>" ).before( "<span>test</span>" ); + assert.equal( set[ 0 ].nodeName.toLowerCase(), "div", "Insert after a disconnected node should be a no-op" ); + assert.equal( set.length, 1, "Insert the element after the disconnected node should be a no-op" ); + } ); +@@ -1250,10 +1250,10 @@ + jQuery( "#anchor1" ).contents().replaceWith( val( tmp ) ); + assert.deepEqual( jQuery( "#anchor1" ).contents().get(), [ tmp ], "Replace text node with element" ); + +- tmp = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ).on( "click", function() { ++ tmp = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ).on( "click", function() { + assert.ok( true, "Newly bound click run." ); + } ); +- y = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ).on( "click", function() { ++ y = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ).on( "click", function() { + assert.ok( false, "Previously bound click run." ); + } ); + child = y.append( "<b>test</b>" ).find( "b" ).on( "click", function() { +@@ -1267,7 +1267,7 @@ + y.trigger( "click" ); // Shouldn't be run + child.trigger( "click" ); // Shouldn't be run + +- y = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ).on( "click", function() { ++ y = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ).on( "click", function() { + assert.ok( false, "Previously bound click run." ); + } ); + child2 = y.append( "<u>test</u>" ).find( "u" ).on( "click", function() { +@@ -1279,13 +1279,13 @@ + + child2.trigger( "click" ); + +- set = jQuery( "<div/>" ).replaceWith( val( "<span>test</span>" ) ); ++ set = jQuery( "<div></div>" ).replaceWith( val( "<span>test</span>" ) ); + assert.equal( set[ 0 ].nodeName.toLowerCase(), "div", "No effect on a disconnected node." ); + assert.equal( set.length, 1, "No effect on a disconnected node." ); + assert.equal( set[ 0 ].childNodes.length, 0, "No effect on a disconnected node." ); + + child = jQuery( "#qunit-fixture" ).children().first(); +- $div = jQuery( "<div class='pathological'/>" ).insertBefore( child ); ++ $div = jQuery( "<div class='pathological'></div>" ).insertBefore( child ); + $div.replaceWith( $div ); + assert.deepEqual( jQuery( ".pathological", "#qunit-fixture" ).get(), $div.get(), + "Self-replacement" ); +@@ -1342,7 +1342,7 @@ + + assert.expect( 25 ); + +- var $el = jQuery( "<div/><div/>" ).html( "<p>0</p>" ), ++ var $el = jQuery( "<div></div><div></div>" ).html( "<p>0</p>" ), + expectedHTML = $el.html(), + tests = { + "empty string": "", +@@ -1355,13 +1355,13 @@ + }; + + jQuery.each( tests, function( label, input ) { +- $el.html( "<a/>" ).children().replaceWith( input ); ++ $el.html( "<a></a>" ).children().replaceWith( input ); + assert.strictEqual( $el.html(), "", "replaceWith(" + label + ")" ); +- $el.html( "<b/>" ).children().replaceWith( function() { return input; } ); ++ $el.html( "<b></b>" ).children().replaceWith( function() { return input; } ); + assert.strictEqual( $el.html(), "", "replaceWith(function returning " + label + ")" ); +- $el.html( "<i/>" ).children().replaceWith( function( i ) { return input; } ); ++ $el.html( "<i></i>" ).children().replaceWith( function( i ) { return input; } ); + assert.strictEqual( $el.html(), "", "replaceWith(other function returning " + label + ")" ); +- $el.html( "<p/>" ).children().replaceWith( function( i ) { ++ $el.html( "<p></p>" ).children().replaceWith( function( i ) { + return i ? + input : + jQuery( this ).html( i + "" ); +@@ -1482,7 +1482,7 @@ + div.remove(); + + // Verify that cloned children can keep event listeners +- div = jQuery( "<div/>" ).append( [ document.createElement( "table" ), document.createElement( "table" ) ] ); ++ div = jQuery( "<div></div>" ).append( [ document.createElement( "table" ), document.createElement( "table" ) ] ); + div.find( "table" ).on( "click", function() { + assert.ok( true, "Bound event still exists." ); + } ); +@@ -1509,7 +1509,7 @@ + div.remove(); + + // Test both html() and clone() for <embed> and <object> types +- div = jQuery( "<div/>" ).html( "<embed height='355' width='425' src='http://www.youtube.com/v/3KANI2dpXLw&hl=en'></embed>" ); ++ div = jQuery( "<div></div>" ).html( "<embed height='355' width='425' src='http://www.youtube.com/v/3KANI2dpXLw&hl=en'></embed>" ); + + clone = div.clone( true ); + assert.equal( clone.length, 1, "One element cloned" ); +@@ -1519,7 +1519,7 @@ + // this is technically an invalid object, but because of the special + // classid instantiation it is the only kind that IE has trouble with, + // so let's test with it too. +- div = jQuery( "<div/>" ).html( "<object height='355' width='425' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'> <param name='movie' value='http://www.youtube.com/v/3KANI2dpXLw&hl=en'> <param name='wmode' value='transparent'> </object>" ); ++ div = jQuery( "<div></div>" ).html( "<object height='355' width='425' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'> <param name='movie' value='http://www.youtube.com/v/3KANI2dpXLw&hl=en'> <param name='wmode' value='transparent'> </object>" ); + + clone = div.clone( true ); + assert.equal( clone.length, 1, "One element cloned" ); +@@ -1546,14 +1546,14 @@ + } )(); + + // and here's a valid one. +- div = jQuery( "<div/>" ).html( "<object height='355' width='425' type='application/x-shockwave-flash' data='http://www.youtube.com/v/3KANI2dpXLw&hl=en'> <param name='movie' value='http://www.youtube.com/v/3KANI2dpXLw&hl=en'> <param name='wmode' value='transparent'> </object>" ); ++ div = jQuery( "<div></div>" ).html( "<object height='355' width='425' type='application/x-shockwave-flash' data='http://www.youtube.com/v/3KANI2dpXLw&hl=en'> <param name='movie' value='http://www.youtube.com/v/3KANI2dpXLw&hl=en'> <param name='wmode' value='transparent'> </object>" ); + + clone = div.clone( true ); + assert.equal( clone.length, 1, "One element cloned" ); + assert.equal( clone.html(), div.html(), "Element contents cloned" ); + assert.equal( clone[ 0 ].nodeName.toUpperCase(), "DIV", "DIV element cloned" ); + +- div = jQuery( "<div/>" ).data( { "a": true } ); ++ div = jQuery( "<div></div>" ).data( { "a": true } ); + clone = div.clone( true ); + assert.equal( clone.data( "a" ), true, "Data cloned." ); + clone.data( "a", false ); +@@ -1688,12 +1688,12 @@ + div = jQuery( "<div></div>" ), + fixture = jQuery( "#qunit-fixture" ); + +- div.html( valueObj( "<div id='parent_1'><div id='child_1'/></div><div id='parent_2'/>" ) ); ++ div.html( valueObj( "<div id='parent_1'><div id='child_1'></div></div><div id='parent_2'></div>" ) ); + assert.equal( div.children().length, 2, "Found children" ); + assert.equal( div.children().children().length, 1, "Found grandchild" ); + + actual = []; expected = []; +- tmp = jQuery( "<map/>" ).html( valueObj( "<area alt='area'/>" ) ).each( function() { ++ tmp = jQuery( "<map></map>" ).html( valueObj( "<area alt='area'></area>" ) ).each( function() { + expected.push( "AREA" ); + actual.push( childNodeNames( this ) ); + } ); +@@ -1748,7 +1748,7 @@ + assert.equal( expected.length, 1, "Expecting one parent" ); + assert.deepEqual( actual, expected, "Found the inserted style element" ); + +- fixture.html( valueObj( "<select/>" ) ); ++ fixture.html( valueObj( "<select></select>" ) ); + jQuery( "#qunit-fixture select" ).html( valueObj( "<option>O1</option><option selected='selected'>O2</option><option>O3</option>" ) ); + assert.equal( jQuery( "#qunit-fixture select" ).val(), "O2", "Selected option correct" ); + +@@ -1867,7 +1867,7 @@ + + assert.equal( j.html().replace( / xmlns="[^"]+"/g, "" ).toLowerCase(), "<b>bold</b>", "Check node,textnode,comment with html()" ); + +- $div = jQuery( "<div />" ); ++ $div = jQuery( "<div></div>" ); + + assert.equal( $div.html( function( i, val ) { + assert.equal( val, "", "Make sure the incoming value is correct." ); +@@ -1879,7 +1879,7 @@ + return 0; + } ).html(), "0", "Setting a zero as html" ); + +- $div2 = jQuery( "<div/>" ); ++ $div2 = jQuery( "<div></div>" ); + insert = "<div>hello1</div>"; + assert.equal( $div2.html( function( i, val ) { + assert.equal( val, "", "Make sure the incoming value is correct." ); +@@ -2175,7 +2175,7 @@ + QUnit.test( "jQuery.cleanData eliminates all private data (gh-2127)", function( assert ) { + assert.expect( 3 ); + +- var div = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ); ++ var div = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ); + + jQuery._data( div[ 0 ], "gh-2127", "testing" ); + +@@ -2195,7 +2195,7 @@ + assert.expect( 3 ); + + var key, +- div = jQuery( "<div/>" ); ++ div = jQuery( "<div></div>" ); + div.data( "some", "data" ); + assert.ok( !jQuery.isEmptyObject( jQuery.data( div[ 0 ] ) ), "Ensure some public data exists" ); + +@@ -2217,7 +2217,7 @@ + + // DOM manipulation fails if added text matches an Object method + var i, +- $f = jQuery( "<div />" ).appendTo( "#qunit-fixture" ), ++ $f = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ), + bad = [ "start-", "toString", "hasOwnProperty", "append", "here&there!", "-end" ]; + + for ( i = 0; i < bad.length; i++ ) { +@@ -2365,7 +2365,7 @@ + var div; + + try { +- div = jQuery( "<div/><hr/><code/><b/>" ); ++ div = jQuery( "<div></div><hr/><code></code><b></b>" ); + } catch ( e ) {} + + assert.ok( div && div.jquery, "Created nodes safely, guarded against exceptions on safeChildNodes[ -1 ]" ); +@@ -2375,11 +2375,11 @@ + + assert.expect( 5 ); + +- assert.strictEqual( jQuery( "<div/>" ).clone().addClass( "test" ).appendTo( "<div/>" ).end().end().hasClass( "test" ), false, "Check jQuery.fn.appendTo after jQuery.clone" ); +- assert.strictEqual( jQuery( "<div/>" ).find( "p" ).end().addClass( "test" ).appendTo( "<div/>" ).end().end().hasClass( "test" ), false, "Check jQuery.fn.appendTo after jQuery.fn.find" ); +- assert.strictEqual( jQuery( "<div/>" ).text( "test" ).addClass( "test" ).appendTo( "<div/>" ).end().end().hasClass( "test" ), false, "Check jQuery.fn.appendTo after jQuery.fn.text" ); +- assert.strictEqual( jQuery( "<bdi/>" ).clone().addClass( "test" ).appendTo( "<div/>" ).end().end().hasClass( "test" ), false, "Check jQuery.fn.appendTo after clone html5 element" ); +- assert.strictEqual( jQuery( "<p/>" ).appendTo( "<div/>" ).end().length, jQuery( "<p>test</p>" ).appendTo( "<div/>" ).end().length, "Elements created with createElement and with createDocumentFragment should be treated alike" ); ++ assert.strictEqual( jQuery( "<div></div>" ).clone().addClass( "test" ).appendTo( "<div></div>" ).end().end().hasClass( "test" ), false, "Check jQuery.fn.appendTo after jQuery.clone" ); ++ assert.strictEqual( jQuery( "<div></div>" ).find( "p" ).end().addClass( "test" ).appendTo( "<div></div>" ).end().end().hasClass( "test" ), false, "Check jQuery.fn.appendTo after jQuery.fn.find" ); ++ assert.strictEqual( jQuery( "<div></div>" ).text( "test" ).addClass( "test" ).appendTo( "<div></div>" ).end().end().hasClass( "test" ), false, "Check jQuery.fn.appendTo after jQuery.fn.text" ); ++ assert.strictEqual( jQuery( "<bdi></bdi>" ).clone().addClass( "test" ).appendTo( "<div></div>" ).end().end().hasClass( "test" ), false, "Check jQuery.fn.appendTo after clone html5 element" ); ++ assert.strictEqual( jQuery( "<p></p>" ).appendTo( "<div></div>" ).end().length, jQuery( "<p>test</p>" ).appendTo( "<div></div>" ).end().length, "Elements created with createElement and with createDocumentFragment should be treated alike" ); + } ); + + QUnit.asyncTest( "html() - script exceptions bubble (#11743)", 2, function( assert ) { +@@ -2468,7 +2468,7 @@ + "<script>ok( true, 'evaluated: inner no type' );</script>", + "</div>" + ].join( "" ) ); +- scriptsIn.appendTo( jQuery( "<div class='detached'/>" ) ); ++ scriptsIn.appendTo( jQuery( "<div class='detached'></div>" ) ); + objGlobal.ok = isOk; + + scriptsOut = fixture.append( scriptsIn ).find( "script" ); +@@ -2485,7 +2485,7 @@ + + if ( jQuery.ajax ) { + Globals.register( "testBar" ); +- jQuery( "#qunit-fixture" ).append( "<script src='" + url( "mock.php?action=testbar" ) + "'/>" ); ++ jQuery( "#qunit-fixture" ).append( "<script src='" + url( "mock.php?action=testbar" ) + "'></script>" ); + assert.strictEqual( window.testBar, "bar", "Global script evaluation" ); + } else { + assert.ok( true, "No jQuery.ajax" ); +@@ -2507,7 +2507,7 @@ + assert.equal( ( input.url || input ).slice( -1 ), expectedArgument, message ); + expectedArgument++; + }; +- jQuery( "#qunit-fixture" ).append( "<script src='1'/><script src='2'/>" ); ++ jQuery( "#qunit-fixture" ).append( "<script src='1'></script><script src='2'></script>" ); + assert.equal( expectedArgument, 3, "synchronous execution" ); + + message = "custom implementation"; +@@ -2516,7 +2516,7 @@ + jQuery.ajax = function( options ) { + assert.strictEqual( options, {}, "Unexpected call to jQuery.ajax" ); + }; +- jQuery( "#qunit-fixture" ).append( "<script src='3'/><script src='4'/>" ); ++ jQuery( "#qunit-fixture" ).append( "<script src='3'></script><script src='4'></script>" ); + + jQuery.ajax = ajax; + jQuery._evalUrl = evalUrl; +@@ -2530,7 +2530,7 @@ + invocations = 0, + done = assert.async(), + htmlPrefilter = jQuery.htmlPrefilter, +- fixture = jQuery( "<div/>" ).appendTo( "#qunit-fixture" ), ++ fixture = jQuery( "<div></div>" ).appendTo( "#qunit-fixture" ), + poison = "<script>jQuery.htmlPrefilter.assert.ok( false, 'script not executed' );</script>"; + + jQuery.htmlPrefilter = function( html ) { +@@ -2546,7 +2546,7 @@ + expectedArgument = "A-" + poison + "B-" + poison + poison + "C-"; + fixture.html( expectedArgument ); + +- expectedArgument = "D-" + poison + "E-" + "<del/><div>" + poison + poison + "</div>" + "F-"; ++ expectedArgument = "D-" + poison + "E-" + "<del></del><div>" + poison + poison + "</div>" + "F-"; + fixture.append( expectedArgument ); + + expectedArgument = poison; +@@ -2601,7 +2601,7 @@ + + var i = 0; + +- jQuery( "<div/><div/>" ).before( function( index ) { ++ jQuery( "<div></div><div></div>" ).before( function( index ) { + assert.equal( index, i++, "Index should be correct" ); + } ); + +@@ -2627,7 +2627,7 @@ + thead: "<tr><td>thead</td></tr>", + tbody: "<tr><td>tbody</td></tr>", + tfoot: "<tr><td>tfoot</td></tr>", +- colgroup: "<col span='5' />", ++ colgroup: "<col span='5'></col>", + caption: "caption", + tr: "<td>tr</td>", + th: "th", +@@ -2644,23 +2644,19 @@ + args.push( html ); + } ); + +- jQuery.fn.append.apply( jQuery( "<div/>" ), args ).children().each( function( i ) { ++ jQuery.fn.append.apply( jQuery( "<div></div>" ), args ).children().each( function( i ) { + assert.ok( this.nodeName.toLowerCase() === results[ i ] ); + } ); + } ); + + QUnit.test( "Validate creation of multiple quantities of certain elements (#13818)", function( assert ) { +- assert.expect( 44 ); ++ assert.expect( 22 ); + + var tags = [ "thead", "tbody", "tfoot", "colgroup", "col", "caption", "tr", "th", "td", "optgroup", "option" ]; + + jQuery.each( tags, function( index, tag ) { +- jQuery( "<" + tag + "/><" + tag + "/>" ).each( function() { +- assert.ok( this.nodeName.toLowerCase() === tag, tag + " empty elements created correctly" ); +- } ); +- +- jQuery( "<" + this + "></" + tag + "><" + tag + "></" + tag + ">" ).each( function() { +- assert.ok( this.nodeName.toLowerCase() === tag, tag + " elements with closing tag created correctly" ); ++ jQuery( "<" + tag + "></" + tag + "><" + tag + "></" + tag + ">" ).each( function() { ++ assert.ok( this.nodeName.toLowerCase() === tag, tag + " elements created correctly" ); + } ); + } ); + } ); +@@ -2708,7 +2704,7 @@ + table.appendChild( document.createElement( "tbody" ) ); + document.getElementById( "qunit-fixture" ).appendChild( table ); + +- jQuery( table ).append( "<tfoot/>" ); ++ jQuery( table ).append( "<tfoot></tfoot>" ); + + // Lowercase and replace spaces to remove possible browser inconsistencies + html = table.innerHTML.toLowerCase().replace( /\s/g, "" ); +@@ -2747,7 +2743,7 @@ + + jQuery( table ).appendTo( "#qunit-fixture" ); + +- jQuery( "<col width='150'/>" ).prependTo( table ); ++ jQuery( "<col width='150'></col>" ).prependTo( table ); + + assert.strictEqual( table.find( "td" ).width(), 150 ); + } ); +@@ -2762,7 +2758,7 @@ + "</td></tr></thead>", + newRow = "<tr><td>added</td></tr>", + htmlExpected = htmlIn.replace( "</thead>", "</thead>" + newRow ), +- table = supportjQuery( "<table/>" ).html( htmlIn ).appendTo( "#qunit-fixture" )[ 0 ]; ++ table = supportjQuery( "<table></table>" ).html( htmlIn ).appendTo( "#qunit-fixture" )[ 0 ]; + + jQuery( table ).append( newRow ); + +--- a/test/unit/offset.js ++++ b/test/unit/offset.js +@@ -5,7 +5,7 @@ + } + + var supportsFixedPosition, supportsScroll, alwaysScrollable, +- forceScroll = supportjQuery( "<div/>" ).css( { width: 2000, height: 2000 } ), ++ forceScroll = supportjQuery( "<div></div>" ).css( { width: 2000, height: 2000 } ), + checkSupport = function( assert ) { + + // Only run once +@@ -81,7 +81,7 @@ + QUnit.test( "hidden (display: none) element", function( assert ) { + assert.expect( 4 ); + +- var node = jQuery( "<div style='display: none' />" ).appendTo( "#qunit-fixture" ), ++ var node = jQuery( "<div style='display: none'></div>" ).appendTo( "#qunit-fixture" ), + result = node.offset(); + + node.remove(); +@@ -98,7 +98,7 @@ + QUnit.test( "0 sized element", function( assert ) { + assert.expect( 4 ); + +- var node = jQuery( "<div style='margin: 5px; width: 0; height: 0' />" ).appendTo( "#qunit-fixture" ), ++ var node = jQuery( "<div style='margin: 5px; width: 0; height: 0'></div>" ).appendTo( "#qunit-fixture" ), + result = node.offset(); + + node.remove(); +@@ -112,7 +112,7 @@ + QUnit.test( "hidden (visibility: hidden) element", function( assert ) { + assert.expect( 4 ); + +- var node = jQuery( "<div style='margin: 5px; visibility: hidden' />" ).appendTo( "#qunit-fixture" ), ++ var node = jQuery( "<div style='margin: 5px; visibility: hidden'></div>" ).appendTo( "#qunit-fixture" ), + result = node.offset(); + + node.remove(); +@@ -783,7 +783,7 @@ + QUnit.test( "fractions (see #7730 and #7885)", function( assert ) { + assert.expect( 2 ); + +- jQuery( "body" ).append( "<div id='fractions'/>" ); ++ jQuery( "body" ).append( "<div id='fractions'></div>" ); + + var result, + expected = { "top": 1000, "left": 1000 }, +--- a/test/unit/selector.js ++++ b/test/unit/selector.js +@@ -92,7 +92,7 @@ + QUnit.test( "selectors with comma", function( assert ) { + assert.expect( 4 ); + +- var fixture = jQuery( "<div><h2><span/></h2><div><p><span/></p><p/></div></div>" ); ++ var fixture = jQuery( "<div><h2><span></span></h2><div><p><span></span></p><p></p></div></div>" ); + + assert.equal( fixture.find( "h2, div p" ).filter( "p" ).length, 2, "has to find two <p>" ); + assert.equal( fixture.find( "h2, div p" ).filter( "h2" ).length, 1, "has to find one <h2>" ); +@@ -275,7 +275,7 @@ + QUnit.test( "disconnected nodes", function( assert ) { + assert.expect( 1 ); + +- var $div = jQuery( "<div/>" ); ++ var $div = jQuery( "<div></div>" ); + assert.equal( $div.is( "div" ), true, "Make sure .is('nodeName') works on disconnected nodes." ); + } ); + +--- a/test/unit/traversing.js ++++ b/test/unit/traversing.js +@@ -197,7 +197,7 @@ + + assert.equal( jQuery( "#text2" ).index(), 2, "Returns the index of a child amongst its siblings" ); + +- assert.equal( jQuery( "<div/>" ).index(), -1, "Node without parent returns -1" ); ++ assert.equal( jQuery( "<div></div>" ).index(), -1, "Node without parent returns -1" ); + } ); + + QUnit.test( "index(Object|String|undefined)", function( assert ) { +@@ -502,7 +502,7 @@ + obj = jQuery( "#qunit-fixture" ).has( jQuery( "#sndp" )[ 0 ] ); + assert.deepEqual( obj.get(), q( "qunit-fixture" ), "Keeps elements that have the element as a descendant" ); + +- detached = jQuery( "<a><b><i/></b></a>" ); ++ detached = jQuery( "<a><b><i></i></b></a>" ); + assert.deepEqual( detached.has( detached.find( "i" )[ 0 ] ).get(), detached.get(), "...Even when detached" ); + + multipleParent = jQuery( "#qunit-fixture, #header" ).has( jQuery( "#sndp" )[ 0 ] ); +@@ -517,7 +517,7 @@ + obj = jQuery( "#qunit-fixture" ).has( "#sndp" ); + assert.deepEqual( obj.get(), q( "qunit-fixture" ), "Keeps elements that have any element matching the selector as a descendant" ); + +- detached = jQuery( "<a><b><i/></b></a>" ); ++ detached = jQuery( "<a><b><i></i></b></a>" ); + assert.deepEqual( detached.has( "i" ).get(), detached.get(), "...Even when detached" ); + + multipleParent = jQuery( "#qunit-fixture, #header" ).has( "#sndp" ); +@@ -538,7 +538,7 @@ + simple = jQuery( "#qunit-fixture" ).has( jQuery( "#sndp" ) ); + assert.deepEqual( simple.get(), q( "qunit-fixture" ), "Keeps elements that have any element in the jQuery list as a descendant" ); + +- detached = jQuery( "<a><b><i/></b></a>" ); ++ detached = jQuery( "<a><b><i></i></b></a>" ); + assert.deepEqual( detached.has( detached.find( "i" ) ).get(), detached.get(), "...Even when detached" ); + + multipleParent = jQuery( "#qunit-fixture, #header" ).has( jQuery( "#sndp" ) ); +@@ -566,7 +566,7 @@ + var set = q( "sndp", "en", "sap" ); + assert.deepEqual( jQuery( "#en, #sndp" ).siblings().get(), set, "Check for unique results from siblings" ); + assert.deepEqual( jQuery( "#option5a" ).siblings( "option[data-attr]" ).get(), q( "option5c" ), "Has attribute selector in siblings (#9261)" ); +- assert.equal( jQuery( "<a/>" ).siblings().length, 0, "Detached elements have no siblings (#11370)" ); ++ assert.equal( jQuery( "<a></a>" ).siblings().length, 0, "Detached elements have no siblings (#11370)" ); + } ); + + QUnit[ jQuery.find.compile ? "test" : "skip" ]( "siblings([String])", function( assert ) { +@@ -733,7 +733,7 @@ + + assert.equal( jQuery( "div", ibody ).text(), "span text", "Make sure the correct div is still left after deletion in IFrame" ); + +- jQuery( "<table/>", ibody ).append( "<tr><td>cell</td></tr>" ).appendTo( ibody ); ++ jQuery( "<table></table>", ibody ).append( "<tr><td>cell</td></tr>" ).appendTo( ibody ); + jQuery( "table", ibody ).remove(); + assert.equal( jQuery( "div", ibody ).length, 1, "Check for JS error on add and delete of a table in IFrame" ); + +@@ -761,7 +761,7 @@ + + assert.equal( contents.find( "span" ).text(), "Hello, Web Component!", "Find span in template and check its text" ); + +- jQuery( "<div id='templateTest' />" ).append( ++ jQuery( "<div id='templateTest'></div>" ).append( + jQuery( jQuery.map( contents, function( node ) { + return document.importNode( node, true ); + } ) ) +@@ -832,7 +832,7 @@ + "Check elements from document" + ); + +- divs = jQuery( "<div/>" ).add( "#sndp" ); ++ divs = jQuery( "<div></div>" ).add( "#sndp" ); + assert.ok( divs[ 0 ].parentNode, "Sort with the disconnected node last (started with disconnected first)." ); + } ); + +@@ -850,7 +850,7 @@ + assert.expect( 3 ); + + var x, +- divs = jQuery( "#sndp" ).add( "<div/>" ); ++ divs = jQuery( "#sndp" ).add( "<div></div>" ); + + assert.ok( !divs[ 1 ].parentNode, "Sort with the disconnected node last." ); + +@@ -863,7 +863,7 @@ + assert.expect( 4 ); + + var x, +- tmp = jQuery( "<div/>" ); ++ tmp = jQuery( "<div></div>" ); + + x = jQuery( [] ) + .add( +@@ -892,7 +892,7 @@ + assert.expect( 2 ); + + var x, +- tmp = jQuery( "<div/>" ); ++ tmp = jQuery( "<div></div>" ); + + x = jQuery( [] ).add( jQuery( "<p id='x1'>xxx</p>" ).appendTo( tmp )[ 0 ] ).add( jQuery( "<p id='x2'>xxx</p>" ).appendTo( tmp )[ 0 ] ); + assert.equal( x[ 0 ].id, "x1", "Check on-the-fly element1" ); +--- a/test/unit/wrap.js ++++ b/test/unit/wrap.js +@@ -74,7 +74,7 @@ + cacheLength++; + } + +- j = jQuery( "<label/>" ).wrap( val( "<li/>" ) ); ++ j = jQuery( "<label></label>" ).wrap( val( "<li></li>" ) ); + assert.equal( + j[ 0 ] .nodeName.toUpperCase(), "LABEL", "Element is a label" + ); +@@ -90,7 +90,7 @@ + ); + + // Wrap an element containing a text node +- j = jQuery( "<span/>" ).wrap( "<div>test</div>" ); ++ j = jQuery( "<span></span>" ).wrap( "<div>test</div>" ); + assert.equal( + j[ 0 ].previousSibling.nodeType, 3, "Make sure the previous node is a text element" + ); +@@ -112,7 +112,7 @@ + ); + + // Wrap an element with a jQuery set +- j = jQuery( "<span/>" ).wrap( jQuery( "<div></div>" ) ); ++ j = jQuery( "<span></span>" ).wrap( jQuery( "<div></div>" ) ); + assert.equal( + j[ 0 ].parentNode.nodeName.toLowerCase(), "div", "Wrapping works." + ); +@@ -128,7 +128,7 @@ + jQuery( this ).off(); + } ); + +- j = jQuery( "<span/>" ).wrap( result ); ++ j = jQuery( "<span></span>" ).wrap( result ); + assert.equal( + j[ 0 ].parentNode.nodeName.toLowerCase(), "div", "Wrapping works." + ); +@@ -313,7 +313,7 @@ + assert.expect( 5 ); + + var num, +- div = jQuery( "<div/>" ); ++ div = jQuery( "<div></div>" ); + + num = jQuery( "#first" ).children().length; + jQuery( "#first" ).wrapInner( document.getElementById( "empty" ) ); +@@ -375,7 +375,7 @@ + + var num, + val = manipulationFunctionReturningObj, +- div = jQuery( "<div/>" ); ++ div = jQuery( "<div></div>" ); + + num = jQuery( "#first" ).children().length; + jQuery( "#first" ).wrapInner( val( document.getElementById( "empty" ) ) ); diff -Nru jquery-3.3.1~dfsg/debian/patches/CVE-2020-11023.patch jquery-3.3.1~dfsg/debian/patches/CVE-2020-11023.patch --- jquery-3.3.1~dfsg/debian/patches/CVE-2020-11023.patch 1969-12-31 19:00:00.000000000 -0500 +++ jquery-3.3.1~dfsg/debian/patches/CVE-2020-11023.patch 2021-03-09 14:42:16.000000000 -0500 @@ -0,0 +1,163 @@ +From 966a70909019aa09632c87c0002c522fa4a1e30e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?= + <m.go...@gmail.com> +Date: Mon, 30 Mar 2020 20:15:09 +0200 +Subject: [PATCH] Manipulation: Skip the select wrapper for <option> outside of + IE 9 + +Closes gh-4647 +--- + src/manipulation/support.js | 6 ++++++ + src/manipulation/wrapMap.js | 15 ++++++++------- + test/unit/support.js | 13 +++++++++++++ + 3 files changed, 27 insertions(+), 7 deletions(-) + +--- a/src/manipulation/support.js ++++ b/src/manipulation/support.js +@@ -28,6 +28,12 @@ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = "<textarea>x</textarea>"; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; ++ ++ // Support: IE <=9 only ++ // IE <=9 replaces <option> tags with their contents when inserted outside of ++ // the select element. ++ div.innerHTML = "<option></option>"; ++ support.option = !!div.lastChild; + } )(); + + return support; +--- a/src/manipulation/wrapMap.js ++++ b/src/manipulation/wrapMap.js +@@ -1,13 +1,12 @@ +-define( function() { ++define( [ ++ "./support" ++], function( support ) { + + "use strict"; + + // We have to close these tags to support XHTML (#13200) + var wrapMap = { + +- // Support: IE <=9 only +- option: [ 1, "<select multiple='multiple'>", "</select>" ], +- + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting <tbody> or other required elements. +@@ -19,11 +18,13 @@ + _default: [ 0, "", "" ] + }; + +-// Support: IE <=9 only +-wrapMap.optgroup = wrapMap.option; +- + wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; + wrapMap.th = wrapMap.td; + ++// Support: IE <=9 only ++if ( !support.option ) { ++ wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; ++} ++ + return wrapMap; + } ); +--- a/test/unit/support.js ++++ b/test/unit/support.js +@@ -69,6 +69,7 @@ + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, ++ "option": true, + "optSelected": true, + "pixelBoxStyles": true, + "pixelPosition": true, +@@ -87,6 +88,7 @@ + "createHTMLDocument": true, + "focusin": true, + "noCloneChecked": false, ++ "option": true, + "optSelected": false, + "pixelBoxStyles": true, + "pixelPosition": true, +@@ -105,6 +107,7 @@ + "createHTMLDocument": true, + "focusin": true, + "noCloneChecked": false, ++ "option": false, + "optSelected": false, + "pixelBoxStyles": true, + "pixelPosition": true, +@@ -126,6 +129,7 @@ + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, ++ "option": true, + "optSelected": true, + "pixelBoxStyles": true, + "pixelPosition": true, +@@ -144,6 +148,7 @@ + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, ++ "option": true, + "optSelected": true, + "pixelBoxStyles": true, + "pixelPosition": true, +@@ -162,6 +167,7 @@ + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, ++ "option": true, + "optSelected": true, + "pixelBoxStyles": false, + "pixelPosition": false, +@@ -180,6 +186,7 @@ + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, ++ "option": true, + "optSelected": true, + "pixelBoxStyles": true, + "pixelPosition": true, +@@ -198,6 +205,7 @@ + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, ++ "option": true, + "optSelected": true, + "pixelBoxStyles": true, + "pixelPosition": true, +@@ -216,6 +224,7 @@ + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, ++ "option": true, + "optSelected": true, + "pixelBoxStyles": false, + "pixelPosition": false, +@@ -234,6 +243,7 @@ + "createHTMLDocument": false, + "focusin": false, + "noCloneChecked": true, ++ "option": true, + "optSelected": true, + "pixelBoxStyles": false, + "pixelPosition": false, +@@ -252,6 +262,7 @@ + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, ++ "option": true, + "optSelected": true, + "pixelBoxStyles": false, + "pixelPosition": false, +@@ -270,6 +281,7 @@ + "createHTMLDocument": true, + "focusin": false, + "noCloneChecked": true, ++ "option": true, + "optSelected": true, + "pixelBoxStyles": false, + "pixelPosition": false, diff -Nru jquery-3.3.1~dfsg/debian/patches/series jquery-3.3.1~dfsg/debian/patches/series --- jquery-3.3.1~dfsg/debian/patches/series 2019-04-19 02:49:02.000000000 -0400 +++ jquery-3.3.1~dfsg/debian/patches/series 2021-03-09 14:42:16.000000000 -0500 @@ -1 +1,3 @@ SNYK-JS-JQUERY-174006.diff +CVE-2020-11022.patch +CVE-2020-11023.patch