--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian.org@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 <roberto@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.goleb@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.goleb@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
--- End Message ---