[prev in list] [next in list] [prev in thread] [next in thread]
List: xmlbeans-dev
Subject: [jira] Created: (XMLBEANS-179) Saving xml with '&' and '<' characters in attribute values throws an
From: "Olek Poplavskyy (JIRA)" <xmlbeans-dev () xml ! apache ! org>
Date: 2005-07-19 20:29:49
Message-ID: 1051689054.1121804989784.JavaMail.jira () ajax ! apache ! org
[Download RAW message or body]
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
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: 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