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("&", "&amp;").replace("\"", "&quot;").replace("<", 
"&lt;").replace(">", "&gt;");
     }
+
+    private String escapeTextValue(String value) {
+       return value.replace("&", "&amp;").replace("<", "&lt;").replace(">", 
"&gt;");
+    }
+
 }

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&amp;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&gt;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&lt;r</foo>", new 
Renderer(elm).getComplete());
+       }
 
+       
+       // TODO test allowed Unicode characters ranged in element name 
attribute name, attributes values, text
 }


Reply via email to