Skip to content
Permalink
Browse files

Fix #8335: Avoid memory leak by never setting data on non-element non…

…-document nodes. Close gh-1127.
  • Loading branch information...
danilsomsikov authored and gibson042 committed Jan 11, 2013
1 parent a96aa9e commit cc324abf739669bd2a4669742c994b86c4ad467b
Showing with 17 additions and 1 deletion.
  1. +5 −0 src/data.js
  2. +12 −1 test/unit/data.js
@@ -223,6 +223,11 @@ jQuery.extend({

// A method for determining if a DOM node can handle the data expando
acceptData: function( elem ) {
// Do not set data on non-element because it will not be cleared (#8335).
if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
return false;
}

var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];

// nodes accept data unless otherwise specified; rejection can be conditional
@@ -99,8 +99,16 @@ test("jQuery.data(document)", 25, function() {
QUnit.expectJqData(document, "foo");
});

test("Data is not being set on comment and text nodes", function() {
expect(2);

ok( !jQuery.hasData( jQuery("<!-- comment -->").data("foo", 0) ) );
ok( !jQuery.hasData( jQuery("<span>text</span>").contents().data("foo", 0) ) );

});

test("jQuery.acceptData", function() {
expect(7);
expect(9);

ok( jQuery.acceptData( document ), "document" );
ok( jQuery.acceptData( document.documentElement ), "documentElement" );
@@ -115,6 +123,9 @@ test("jQuery.acceptData", function() {
var applet = document.createElement("object");
applet.setAttribute("classid", "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93");
ok( !jQuery.acceptData( applet ), "applet" );

ok( !jQuery.acceptData( document.createComment("") ), "comment" );
ok( !jQuery.acceptData( document.createTextNode("") ), "text" );
});

test(".data()", function() {

0 comments on commit cc324ab

Please sign in to comment.
You can’t perform that action at this time.