[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xmlbeans-dev
Subject:    [jira] Commented: (XMLBEANS-404) entitizeContent CDATA loop
From:       "Stanislav Tsvetkov (JIRA)" <xmlbeans-dev () xml ! apache ! org>
Date:       2010-04-12 20:31:50
Message-ID: 4813870.6101271104310044.JavaMail.jira () thor
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/XMLBEANS-404?page=com.atlassian.jira.plugi \
n.system.issuetabpanels:comment-tabpanel&focusedCommentId=12856151#action_12856151 ] 

Stanislav Tsvetkov commented on XMLBEANS-404:
---------------------------------------------

We run into this issue as well. It is happening when a value in CDATA ends with "]".
For example: "test for XMLBEANS-404 it happens when we are working with array \
element[n]"

We've decided not to patch XMLBEANS, but to implement a very simple workaround in our \
code. If a value has an extra space after "]" XMLBEANS works fine without any patch.



/*
   * this fix for xmlbeans issue with CDATA
  */
  private String xmlBeansFix(String val)
  {
    if (val.endsWith("]"))
      val += " ";
    return val;
  }


> entitizeContent CDATA loop iterating too many times (causes assertion error or \
>                 ArrayIndexOutOfBoundsException in replace)
> -------------------------------------------------------------------------------------------------------------------------
>  
> Key: XMLBEANS-404
> URL: https://issues.apache.org/jira/browse/XMLBEANS-404
> Project: XMLBeans
> Issue Type: Bug
> Affects Versions: Version 2.4 
> Reporter: Andrew Parker
> Priority: Critical
> 
> In the entitizeContent routine in Saver.java there is a loop responsible for \
> modifying bad characters and the ">" in "]]>" when surrounding the text with \
> "<![CDATA[" and "]]>".  The loop iterates _lastEmitCch times, but the first two \
> characters of the text have already been processed. This causes problems in one of \
> two rare scenarios: The last character in _buf is a ']' and the next two unused \
> characters are ']' and '>' respectively The last two characters in _buf are both \
> ']' and the next unused character is a '>' In these instances replace invokes \
> System.arraycopy with invalid parameters as i is outside of the normal _out/_in \
> range resulting in an ArrayIndexOutOfBoundsException or an assertion error is they \
> are enabled. In addition, the first two characters are not checked against \
> isBadChar as they're processed outside of this loop. I believe that a quick and \
> dirty fix for the ArrayIndexOutOfBoundsException (but not isBadChar) would be to \
> change this particular loop from: for ( int cch = _lastEmitCch ; cch > 0 ; cch-- )
> to 
> for ( int cch = _lastEmitCch ; cch > 2; cch-- )
> We don't get the isBadChar problem, so I would be grateful if you could confirm the \
> quick and dirty fix above fixes the ArrayIndexOutOfBoundsException as I'd like to \
> patch our production system.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: \
                https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic