Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixes #9255: xml parsing error in $.parseXML is now properly detected…

… for all browsers. Unit test added.
  • Loading branch information...
commit 27291ff06ddb655f90a8d1eada71f7ac61499b12 1 parent 0ed9909
@jaubourg jaubourg authored
Showing with 36 additions and 17 deletions.
  1. +14 −15 src/core.js
  2. +22 −2 test/unit/core.js
View
29 src/core.js
@@ -553,24 +553,23 @@ jQuery.extend({
},
// Cross-browser xml parsing
- // (xml & tmp used internally)
- parseXML: function( data , xml , tmp ) {
-
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
+ parseXML: function( data ) {
+ var xml, tmp;
+ try {
+ if ( window.DOMParser ) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } else { // IE
+ xml = new ActiveXObject( "Microsoft.XMLDOM" );
+ xml.async = "false";
+ xml.loadXML( data );
+ }
+ } catch( e ) {
+ xml = undefined;
}
-
- tmp = xml.documentElement;
-
- if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
+ if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
jQuery.error( "Invalid XML: " + data );
}
-
return xml;
},
View
24 test/unit/core.js
@@ -867,7 +867,7 @@ test("jQuery.each(Object,Function)", function() {
f[i] = "baz";
});
equals( "baz", f.foo, "Loop over a function" );
-
+
var stylesheet_count = 0;
jQuery.each(document.styleSheets, function(i){
stylesheet_count++;
@@ -984,6 +984,26 @@ test("jQuery.parseJSON", function(){
}
});
+test("jQuery.parseXML", 4, function(){
+ var xml, tmp;
+ try {
+ xml = jQuery.parseXML( "<p>A <b>well-formed</b> xml string</p>" );
+ tmp = xml.getElementsByTagName( "p" )[ 0 ];
+ ok( !!tmp, "<p> present in document" );
+ tmp = tmp.getElementsByTagName( "b" )[ 0 ];
+ ok( !!tmp, "<b> present in document" );
+ strictEqual( tmp.childNodes[ 0 ].nodeValue, "well-formed", "<b> text is as expected" );
+ } catch (e) {
+ strictEqual( e, undefined, "unexpected error" );
+ }
+ try {
+ xml = jQuery.parseXML( "<p>Not a <<b>well-formed</b> xml string</p>" );
+ ok( false, "invalid xml not detected" );
+ } catch( e ) {
+ strictEqual( e, "Invalid XML: <p>Not a <<b>well-formed</b> xml string</p>", "invalid xml detected" );
+ }
+});
+
test("jQuery.sub() - Static Methods", function(){
expect(18);
var Subclass = jQuery.sub();
@@ -1108,7 +1128,7 @@ test("jQuery.sub() - .fn Methods", function(){
test("jQuery.camelCase()", function() {
var tests = {
- "foo-bar": "fooBar",
+ "foo-bar": "fooBar",
"foo-bar-baz": "fooBarBaz"
};
Please sign in to comment.
Something went wrong with that request. Please try again.