Skip to content
Permalink
Browse files

Fixes #13551. Guard against illegal data access by undefined elem-owner

Signed-off-by: Rick Waldron <waldron.rick@gmail.com>
  • Loading branch information...
rwaldron committed Mar 4, 2013
1 parent 91824bd commit 692afbcc5f719392c729997eacb234c07d2a6c78
Showing with 18 additions and 4 deletions.
  1. +7 −4 src/data.js
  2. +11 −0 test/unit/data.js
@@ -85,7 +85,7 @@ Data.prototype = {
// Either a valid cache is found, or will be created.
// New caches will be created and the unlock returned,
// allowing direct access to the newly created
// empty data object.
// empty data object. A valid owner object must be provided.
var cache = this.cache[ this.key( owner ) ];

return key === undefined ?
@@ -255,9 +255,12 @@ jQuery.fn.extend({
var data,
camelKey = jQuery.camelCase( key );

// Get the Data...
if ( value === undefined ) {

// The calling jQuery object (element matches) is not empty
// (and therefore has an element appears at this[0]) and the
// `value` parameter was not undefined. An empty jQuery object
// will result in `undefined` for elem = this[0] which will
// throw an exception if an attempt to read a data cache is made.
if ( elem && value === undefined ) {
// Attempt to get data from the cache
// with the key as-is
data = data_user.get( elem, key );
@@ -670,3 +670,14 @@ test( "JSON data- attributes can have newlines", function() {
equal( x.data("some").foo, "bar", "got a JSON data- attribute with spaces" );
x.remove();
});

test(".data doesn't throw when calling selection is empty. #13551", function() {
expect(1);

try {
jQuery( null ).data( "prop" );
ok( true, "jQuery(null).data('prop') does not throw" );
} catch ( e ) {
ok( false, e.message );
}
});

0 comments on commit 692afbc

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