You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@abdera.apache.org by "Christine Koppelt (JIRA)" <ji...@apache.org> on 2010/12/24 10:12:48 UTC

[jira] Resolved: (ABDERA-251) Charset issue in FOMDiv.getInternalValue() leads to corrupt return value on non-ASCII platforms

     [ https://issues.apache.org/jira/browse/ABDERA-251?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Christine Koppelt resolved ABDERA-251.
--------------------------------------

    Resolution: Fixed

fixed in trunk. Thanks for the patch.

> Charset issue in FOMDiv.getInternalValue() leads to corrupt return value on non-ASCII platforms
> -----------------------------------------------------------------------------------------------
>
>                 Key: ABDERA-251
>                 URL: https://issues.apache.org/jira/browse/ABDERA-251
>             Project: Abdera
>          Issue Type: Bug
>    Affects Versions: 0.4.0, 1.0
>         Environment: z/OS
>            Reporter: Robin Fernandes
>            Assignee: Christine Koppelt
>
> In org.apache.abdera.parser.stax.FOMDiv.getInternalValue(), the content of the div is obtained as a byte array using an XMLStreamWriter.
> The content of the byte array is then converted to String using the default platform encoding (using ByteArrayOutputStream.toString()), which may not be compatible with the encoding used by the XMLStreamWriter.
> A scenario in which this is problematic is if the XMLStreamWriter uses UTF8 (which is the default behaviour), but FOMDiv.getInternalValue() is invoked on z/OS where the platform encoding is a flavour of EBCDIC. In this situation, the method returns garbage.
> Here's a suggested patch which ensures the XMLStreamWriter writes directly to a StringWriter, so no 'bytes to String' conversion is required in FOMDiv, and therefore no transcoding issues arise. The patch also remove seemingly unnecessary calls to XMLStreamWriter.writeStartElement() and XMLStreamWriter.writeEndElement().
> Index: parser/src/main/java/org/apache/abdera/parser/stax/FOMDiv.java
> ===================================================================
> --- parser/src/main/java/org/apache/abdera/parser/stax/FOMDiv.java	(revision 834082)
> +++ parser/src/main/java/org/apache/abdera/parser/stax/FOMDiv.java	(working copy)
> @@ -17,7 +17,7 @@
>  */
>  package org.apache.abdera.parser.stax;
>  
> -import java.io.ByteArrayOutputStream;
> +import java.io.StringWriter;
>  import java.util.Iterator;
>  
>  import javax.xml.namespace.QName;
> @@ -143,16 +143,14 @@
>  
>    protected String getInternalValue() {
>      try {
> -      ByteArrayOutputStream out = new ByteArrayOutputStream();
> +      StringWriter out = new StringWriter(); 
>        XMLStreamWriter writer = 
>          XMLOutputFactory.newInstance().createXMLStreamWriter(out);
> -      writer.writeStartElement("");
>        for (Iterator<?> nodes = this.getChildren(); nodes.hasNext();) {
>          OMNode node = (OMNode) nodes.next();
>          node.serialize(writer);
>        }
> -      writer.writeEndElement();
> -      return out.toString().substring(2);
> +      return out.getBuffer().toString();
>      } catch (Exception e) {}
>      return "";
>    }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.