[
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>&...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]