Author: ngn Date: Tue Nov 17 21:55:39 2009 New Revision: 881557 URL: http://svn.apache.org/viewvc?rev=881557&view=rev Log: Fix broken escaping of reserved characters in XML text
Modified: mina/sandbox/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xmpp/xmlfragment/Renderer.java mina/sandbox/vysper/trunk/nbxml/src/test/java/org/apache/vysper/xmpp/xmlfragment/RendererTestCase.java Modified: mina/sandbox/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xmpp/xmlfragment/Renderer.java URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xmpp/xmlfragment/Renderer.java?rev=881557&r1=881556&r2=881557&view=diff ============================================================================== --- mina/sandbox/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xmpp/xmlfragment/Renderer.java (original) +++ mina/sandbox/vysper/trunk/nbxml/src/main/java/org/apache/vysper/xmpp/xmlfragment/Renderer.java Tue Nov 17 21:55:39 2009 @@ -70,7 +70,7 @@ for (XMLFragment xmlFragment : element.getInnerFragments()) { if (xmlFragment instanceof XMLElement) renderXMLElement((XMLElement) xmlFragment, elementContentBuffer, elementContentBuffer, elementContentBuffer); else if (xmlFragment instanceof XMLText) { - elementContentBuffer.append(((XMLText) xmlFragment).getText()); + elementContentBuffer.append(escapeTextValue(((XMLText) xmlFragment).getText())); } else { throw new UnsupportedOperationException("cannot render XML fragment of type " + xmlFragment.getClass().getName()); } @@ -107,4 +107,9 @@ private String escapeAttributeValue(String value) { return value.replace("&", "&").replace("\"", """).replace("<", "<").replace(">", ">"); } + + private String escapeTextValue(String value) { + return value.replace("&", "&").replace("<", "<").replace(">", ">"); + } + } Modified: mina/sandbox/vysper/trunk/nbxml/src/test/java/org/apache/vysper/xmpp/xmlfragment/RendererTestCase.java URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/nbxml/src/test/java/org/apache/vysper/xmpp/xmlfragment/RendererTestCase.java?rev=881557&r1=881556&r2=881557&view=diff ============================================================================== --- mina/sandbox/vysper/trunk/nbxml/src/test/java/org/apache/vysper/xmpp/xmlfragment/RendererTestCase.java (original) +++ mina/sandbox/vysper/trunk/nbxml/src/test/java/org/apache/vysper/xmpp/xmlfragment/RendererTestCase.java Tue Nov 17 21:55:39 2009 @@ -83,5 +83,54 @@ // ok } } + + public void testRenderNonNamespaceElement() { + XMLElement elm = new XMLElement("foo", null, (Attribute[])null, null); + assertEquals("<foo></foo>", new Renderer(elm).getComplete()); + } + + public void testRenderDefaultNamespaceElement() { + XMLElement elm = new XMLElement("foo", null, new Attribute[]{ + new NamespaceAttribute("http://example.com") + }, null); + assertEquals("<foo xmlns=\"http://example.com\"></foo>", new Renderer(elm).getComplete()); + } + + public void testRenderPrefixedNamespaceElement() { + XMLElement elm = new XMLElement("foo", "pr", new Attribute[]{ + new NamespaceAttribute("pr", "http://example.com") + }, null); + assertEquals("<pr:foo xmlns:pr=\"http://example.com\"></pr:foo>", new Renderer(elm).getComplete()); + } + + public void testRenderSimpleText() { + XMLElement elm = new XMLElement("foo", null, null, new XMLFragment[]{ + new XMLText("bar") + }); + assertEquals("<foo>bar</foo>", new Renderer(elm).getComplete()); + } + + public void testRenderTextWithAmpersand() { + XMLElement elm = new XMLElement("foo", null, null, new XMLFragment[]{ + new XMLText("ba&r") + }); + assertEquals("<foo>ba&r</foo>", new Renderer(elm).getComplete()); + } + + public void testRenderTextWithGt() { + XMLElement elm = new XMLElement("foo", null, null, new XMLFragment[]{ + new XMLText("ba>r") + }); + assertEquals("<foo>ba>r</foo>", new Renderer(elm).getComplete()); + } + + public void testRenderTextWithLt() { + XMLElement elm = new XMLElement("foo", null, null, new XMLFragment[]{ + new XMLText("ba<r") + }); + assertEquals("<foo>ba<r</foo>", new Renderer(elm).getComplete()); + } + + // TODO test allowed Unicode characters ranged in element name attribute name, attributes values, text }