From: Dan Heberden Date: Tue, 5 Apr 2011 08:43:14 +0000 (-0700) Subject: Bug 7587; Enhancement/1.6 Feature: Bypass regexp filter on $.parseJSON and use native... X-Git-Tag: 1.6b1~61 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=a7e7dbd978b97c55a29b364fd277c4ade1ec22b6;p=jquery.git Bug 7587; Enhancement/1.6 Feature: Bypass regexp filter on $.parseJSON and use native thrown exceptions if window.JSON.parse is available --- diff --git a/src/core.js b/src/core.js index 9312ee288..205a6e307 100644 --- a/src/core.js +++ b/src/core.js @@ -515,16 +515,18 @@ jQuery.extend({ // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test(data.replace(rvalidescape, "@") - .replace(rvalidtokens, "]") - .replace(rvalidbraces, "")) ) { - - // Try to use the native JSON parser first - return window.JSON && window.JSON.parse ? - window.JSON.parse( data ) : - (new Function("return " + data))(); + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return (new Function( "return " + data ))(); } else { jQuery.error( "Invalid JSON: " + data ); diff --git a/test/unit/ajax.js b/test/unit/ajax.js index 7c572a32c..e9c7a00c5 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -1600,7 +1600,7 @@ test("jQuery.ajax() - malformed JSON", function() { }, error: function(xhr, msg, detailedMsg) { equals( "parsererror", msg, "A parse error occurred." ); - ok( /^Invalid JSON/.test(detailedMsg), "Detailed parsererror message provided" ); + ok( /^(Invalid|SyntaxError|exception)/i.test(detailedMsg), "Detailed parsererror message provided" ); start(); } });