]> source.dussan.org Git - jquery.git/commitdiff
Core: Throw an error on $("#") rather than returning 0-length collection
authorDave Methvin <dave.methvin@gmail.com>
Wed, 3 Dec 2014 19:51:24 +0000 (14:51 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Wed, 3 Dec 2014 19:51:24 +0000 (14:51 -0500)
Closes gh-1682

Thanks @goob for the issue report!

src/core/init.js
test/unit/core.js

index 9beaedd045e7dca8f87798182d26978a1e4ba35f..9357e05a34f4982bb4f01caf82269bacdc0b133b 100644 (file)
@@ -11,7 +11,8 @@ var rootjQuery,
        // A simple way to check for HTML strings
        // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
        // Strict HTML recognition (#11290: must start with <)
-       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+       // Shortcut simple #id case for speed
+       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
 
        init = jQuery.fn.init = function( selector, context ) {
                var match, elem;
index 8b820397f6be51b5b9f578f45e8c0fbab6c9870b..66c02ac57027a3a5bb37351a3da6d33b0481aeab 100644 (file)
@@ -57,10 +57,15 @@ test("jQuery()", function() {
        equal( jQuery(undefined).length, 0, "jQuery(undefined) === jQuery([])" );
        equal( jQuery(null).length, 0, "jQuery(null) === jQuery([])" );
        equal( jQuery("").length, 0, "jQuery('') === jQuery([])" );
-       equal( jQuery("#").length, 0, "jQuery('#') === jQuery([])" );
-
        equal( jQuery(obj).selector, "div", "jQuery(jQueryObj) == jQueryObj" );
 
+       // Invalid #id goes to Sizzle which will throw an error (gh-1682)
+       try {
+               jQuery( "#" );
+       } catch ( e ) {
+               ok( true, "Threw an error on #id with no id" );
+       }
+
        // can actually yield more than one, when iframes are included, the window is an array as well
        equal( jQuery(window).length, 1, "Correct number of elements generated for jQuery(window)" );