[ http://issues.apache.org/jira/browse/XMLBEANS-179?page=all ] Rajiv Bala closed XMLBEANS-179: -------------------------------
Resolution: Fixed A new tests case has been added (rev 328804) and the fix has been verified > Saving xml with '&' and '<' characters in attribute values throws an > ArrayIndexOutOfBoundsException > --------------------------------------------------------------------------------------------------- > > Key: XMLBEANS-179 > URL: http://issues.apache.org/jira/browse/XMLBEANS-179 > Project: XMLBeans > Type: Bug > Versions: Version 2, Version 1.0.3, Version 1.0.4 > Environment: Mac OS X Panther, Java 1.4.2 > Reporter: Olek Poplavskyy > Assignee: Rajiv Bala > > Look at this xml snippet: > <Net id="dbid:66754220" name="3<.3V" type="POWER"/> > It was read succesfully by xmlbeans but when attempt was made to save it, it > threw an exception. > java.lang.ArrayIndexOutOfBoundsException: 32754 > at org.apache.xmlbeans.impl.store.Saver$TextSaver.emit(Saver.java:1785) > at > org.apache.xmlbeans.impl.store.Saver$TextSaver.emitAttrHelper(Saver.java:1419) > at > org.apache.xmlbeans.impl.store.Saver$TextSaver.emitContainerHelper(Saver.java:1449) > at > org.apache.xmlbeans.impl.store.Saver$TextSaver.emitContainer(Saver.java:1352) > at org.apache.xmlbeans.impl.store.Saver.processContainer(Saver.java:775) > at org.apache.xmlbeans.impl.store.Saver.process(Saver.java:518) > at > org.apache.xmlbeans.impl.store.Saver$TextSaver.ensure(Saver.java:1658) > at org.apache.xmlbeans.impl.store.Saver$TextSaver.read(Saver.java:2148) > at org.apache.xmlbeans.impl.store.Saver$TextReader.read(Saver.java:2271) > at org.apache.xmlbeans.impl.store.Cursor.save(Cursor.java:3118) > at > org.apache.xmlbeans.impl.values.XmlObjectBase.save(XmlObjectBase.java:167) > at > com.designadvance.template.pcb.parser.PCBLibraryWriter.writeSelfContainedMembershipTemplate(PCBLibraryWriter.java:179) > ... > I found that in Saver.java in method replace() code was ignoring the fact > that buffer is circular and was trying to write too much data to the end of > it. > Here is corrected code for replace method: > private int replace ( int i, String replacement ) > { > assert replacement.length() > 0; > int dCch = replacement.length() - 1; > if (dCch == 0) > { > _buf[ i ] = replacement.charAt( 0 ); > return i + 1; > } > assert _free >= 0; > if (dCch > _free) > i = resize( dCch, i ); > > assert _free >= 0; > assert _free >= dCch; > assert getAvailable() > 0; > if (_out > _in && i >= _out) > { > System.arraycopy( _buf, _out, _buf, _out - dCch, i - _out ); > _out -= dCch; > i -= dCch; > } > else > { > assert i < _in; > int availableEndChunk = _buf.length - _in; > int totalToCopy = _in - i; > if ( dCch < availableEndChunk ) > { > System.arraycopy( _buf, i, _buf, i + dCch, totalToCopy ); > _in += dCch; > } > else > { > int numToCopyToStart = totalToCopy - availableEndChunk; > System.arraycopy( _buf, _in-numToCopyToStart, _buf, 0, > numToCopyToStart ); > System.arraycopy( _buf, i, _buf, i+dCch, > availableEndChunk ); > _in = numToCopyToStart; > } > } > replacement.getChars( 0, dCch + 1, _buf, i ); > _free -= dCch; > > assert _free >= 0; > return i + dCch + 1; > } > -- 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]