According to XML 1.0, a CDATA section may contain only:

  [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] |
               [#x10000-#x10FFFF]

  http://www.w3.org/TR/2000/REC-xml-20001006#charsets

XmlWriter fails to &#XXXX;-encode characters below 0x20, and emits XML
which is unparseable by most XML parsers.

The following patch fixes this bug.

  - a


Index: src/java/org/apache/xmlrpc/XmlWriter.java
===================================================================
RCS file: /home/cvspublic/xml-rpc/src/java/org/apache/xmlrpc/XmlWriter.java,v
retrieving revision 1.2
diff -u -r1.2 XmlWriter.java
--- src/java/org/apache/xmlrpc/XmlWriter.java   8 Aug 2002 21:31:50 -0000       1.2
+++ src/java/org/apache/xmlrpc/XmlWriter.java   18 Aug 2002 00:51:13 -0000
@@ -305,6 +305,11 @@
             char c = text.charAt (i);
             switch (c)
             {
+            case '\t':
+            case '\r':
+            case '\n':
+                write(c);
+                break;
             case '<':
                 write(LESS_THAN_ENTITY);
                 break;
@@ -315,7 +320,13 @@
                 write(AMPERSAND_ENTITY);
                 break;
             default:
-                write(c);
+                if (c < 0x20 || c > 0xff) {
+                    write("&#");
+                    write(String.valueOf((int)c));
+                    write(";");
+                } else {
+                    write(c);
+                }
             }
         }
     }

Reply via email to