Commit 27291ff0 authored by jaubourg's avatar jaubourg

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

Fixes #9255: xml parsing error in $.parseXML is now properly detected for all browsers. Unit test added.
parent 0ed99097
...@@ -553,9 +553,9 @@ jQuery.extend({ ...@@ -553,9 +553,9 @@ jQuery.extend({
}, },
// Cross-browser xml parsing // Cross-browser xml parsing
// (xml & tmp used internally) parseXML: function( data ) {
parseXML: function( data , xml , tmp ) { var xml, tmp;
try {
if ( window.DOMParser ) { // Standard if ( window.DOMParser ) { // Standard
tmp = new DOMParser(); tmp = new DOMParser();
xml = tmp.parseFromString( data , "text/xml" ); xml = tmp.parseFromString( data , "text/xml" );
...@@ -564,13 +564,12 @@ jQuery.extend({ ...@@ -564,13 +564,12 @@ jQuery.extend({
xml.async = "false"; xml.async = "false";
xml.loadXML( data ); xml.loadXML( data );
} }
} catch( e ) {
tmp = xml.documentElement; xml = undefined;
}
if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
jQuery.error( "Invalid XML: " + data ); jQuery.error( "Invalid XML: " + data );
} }
return xml; return xml;
}, },
......
...@@ -984,6 +984,26 @@ test("jQuery.parseJSON", function(){ ...@@ -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(){ test("jQuery.sub() - Static Methods", function(){
expect(18); expect(18);
var Subclass = jQuery.sub(); var Subclass = jQuery.sub();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment