[ 
http://issues.apache.org/jira/browse/XMLBEANS-209?page=comments#action_12414243 
] 

Peter Rodgers commented on XMLBEANS-209:
----------------------------------------

This bug occurs whenever entity expansion occurs on or near the circular buffer 
boundary.  Try serializing something like...

<root>&amp;...repeat 4096 times...</root>

The circular buffer wraps and starts to write to the start of the buffer 
overwriting any previously serialized data and making the serialization 
unparseable.  Here is a fix which now detects the buffer wrap around situation 
and expands the buffer.  It is a little more efficient than the suggested patch 
above.

Below is a new else statement found at line 1460 of replace() method in 
Saver.java  The old code is commented out and retained for reference.

else
{
                assert i < _in;
                int availableEndChunk = _buf.length - _in;
                                
                /*PJR Removed Bug
                if ( dCch < availableEndChunk )
                {
                    System.arraycopy( _buf, i, _buf, i + dCch, _in - i );
                    _in += dCch;
                }
                else
                {
                    //PJR Bug is here!
                    int numToCopyToStart = _in - i - availableEndChunk;
                    System.arraycopy( _buf, _in-numToCopyToStart, _buf, 0, 
numToCopyToStart );
                    System.arraycopy( _buf, i, _buf, i+dCch, availableEndChunk 
);

                    _in = numToCopyToStart;                                     
                }
                */
                                
                //PJR fixed version
                if( dCch >= availableEndChunk)
                {       //Grow the buffer
                        i=resize(availableEndChunk+1, i);
                }
                //PJR Shove stuff along.
                System.arraycopy( _buf, i, _buf, i + dCch, _in - i );
                _in += dCch;
}

> Saver$TextSaver.replace method throws java.lang.ArrayIndexOutOfBoundsException
> ------------------------------------------------------------------------------
>
>          Key: XMLBEANS-209
>          URL: http://issues.apache.org/jira/browse/XMLBEANS-209
>      Project: XMLBeans
>         Type: Bug

>     Versions: Version 2
>  Environment: Java2 RE 1.4 and Java2 RE 5.0
>     Reporter: Koyama Hiroshi
>  Attachments: saver.patch
>
> Stacktrace is as follows.
> java.lang.ArrayIndexOutOfBoundsException
>         at java.lang.System.arraycopy(Native Method)
>         at 
> org.apache.xmlbeans.impl.store.Saver$TextSaver.replace(Saver.java:1438)
>         at 
> org.apache.xmlbeans.impl.store.Saver$TextSaver.entitizeContent(Saver.java:1269)
> (snip)
> I checked each variables.
> 1438:    System.arraycopy( _buf, i, _buf, i + dCch, _in - i );  // i:16358 
> _in:16381 dcCh:4 _buf.length:16384
> I think _buf has not enough size.
> So, I changed source as follows. 
> 1438:    if (_buf.length < _in+dCch+_in-i)  i = resize( dCch, i);
> 1439:    System.arraycopy( _buf, i, _buf, i + dCch, _in - i );
> This is not good patch, but I can save xml data.
> regards.

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


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to