Return-Path: Delivered-To: apmail-xml-rpc-dev-archive@xml.apache.org Received: (qmail 52560 invoked by uid 500); 18 Aug 2002 00:54:11 -0000 Mailing-List: contact rpc-dev-help@xml.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Reply-To: rpc-dev@xml.apache.org Delivered-To: mailing list rpc-dev@xml.apache.org Received: (qmail 52550 invoked from network); 18 Aug 2002 00:54:11 -0000 Received: from customer80.globaltap.com (HELO alonzo.megacz.com) (206.104.238.80) by daedalus.apache.org with SMTP; 18 Aug 2002 00:54:11 -0000 Received: from megacz by alonzo.megacz.com with local (Exim 3.12 #1 (Debian)) id 17gEL8-0007y1-00 for ; Sat, 17 Aug 2002 17:54:46 -0700 To: rpc-dev@xml.apache.org Subject: org.apache.xmlrpc.XmlWriter emits invalid XML From: Adam Megacz X-Home-Page: http://www.megacz.com/adam Organization: Myself Date: 17 Aug 2002 17:54:46 -0700 Message-ID: <86y9b5kmuh.fsf@megacz.com> Lines: 50 User-Agent: Gnus/5.0803 (Gnus v5.8.3) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N Status: O X-Status: X-Keywords: 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); + } } } }