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