[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&lt;.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