From 469868d731f4d54ad243775b4a2173e094500574 Mon Sep 17 00:00:00 2001 From: Jeff Schiller Date: Wed, 17 Feb 2010 15:51:57 +0000 Subject: [PATCH] Fix XML escaping problem in attributes, add unit test git-svn-id: http://svg-edit.googlecode.com/svn/trunk@1400 eee81c28-f429-11dd-99c0-75d572ba1ddd --- editor/svgcanvas.js | 4 ++-- test/test1.html | 38 +++++++++++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js index dbeae830..e0aa0f9f 100644 --- a/editor/svgcanvas.js +++ b/editor/svgcanvas.js @@ -1530,7 +1530,7 @@ function BatchCommand(text) { var i = attrs.length; while (i--) { attr = attrs.item(i); - var attrVal = attr.nodeValue; + var attrVal = toXml(attr.nodeValue); // only serialize attributes we don't use internally if (attrVal != "" && $.inArray(attr.localName, ['width','height','xmlns','x','y','viewBox','id','overflow']) == -1) @@ -1545,7 +1545,7 @@ function BatchCommand(text) { } else { for (var i=attrs.length-1; i>=0; i--) { attr = attrs.item(i); - var attrVal = attr.nodeValue; + var attrVal = toXml(attr.nodeValue); if (attr.localName == '-moz-math-font-style') continue; if (attrVal != "") { if(attrVal.indexOf('pointer-events') == 0) continue; diff --git a/test/test1.html b/test/test1.html index e039e372..ec200c8d 100644 --- a/test/test1.html +++ b/test/test1.html @@ -1,7 +1,7 @@ - + @@ -172,7 +172,7 @@ ''); var attrVal = document.getElementById('se_test_elem').getAttributeNS("http://svg-edit.googlecode.com", "foo"); - equals(true, attrVal === "bar", "Preserved namespaced attribute on import"); + equals(attrVal === "bar", true, "Preserved namespaced attribute on import"); var output = svgCanvas.getSvgString(); var has_xlink = output.indexOf('xmlns:xlink="http://www.w3.org/1999/xlink"') !== -1; @@ -180,14 +180,38 @@ var has_foo = output.indexOf('xmlns:foo=') === -1; var has_attr = output.indexOf('se:foo="bar"') !== -1; - equals(true, has_attr, "Preserved namespaced attribute on export"); - equals(true, has_xlink, "Included xlink: xmlns"); - equals(true, has_se, "Included se: xmlns"); - equals(true, has_foo, "Did not include foo: xmlns"); - + equals(has_attr, true, "Preserved namespaced attribute on export"); + equals(has_xlink, true, "Included xlink: xmlns"); + equals(has_se, true, "Included se: xmlns"); + equals(has_foo, true, "Did not include foo: xmlns"); }); + test("Test import math elements inside a foreignObject", function() { + expect(2); + var set = svgCanvas.setSvgString(''+ + ''+ + ''+ + ''+ + 'A'+ + '0'+ + ''+ + ''+ + ''+ + ''); + var math = document.getElementById('math'); + + equals(!!math, true, "Math element exists"); + equals(math.namespaceURI, "http://www.w3.org/1998/Math/MathML", "Preserved MathML namespace"); + }); + test("Test XML entities in attribute", function() { + expect(3); + + equals(svgCanvas.getPrivateMethods().toXml("<"), "<", "Escaped < properly"); + equals(svgCanvas.getPrivateMethods().toXml(">"), ">", "Escaped > properly"); + equals(svgCanvas.getPrivateMethods().toXml("&"), "&", "Escaped & properly"); + // TODO: what about " and ' ? + }); });