[ http://jira.jboss.com/jira/browse/JBAS-1506?page=comments#action_12315792 ] Dimitris Andreadis commented on JBAS-1506: ------------------------------------------
It has been resolved for 4.x/HEAD, waiting to see whether to check in jacorb.jar in 3.x as well, since that was based on an older version of jacorb. > CDROutputStream.create_input_stream is wrong when there are deferred writes > --------------------------------------------------------------------------- > > Key: JBAS-1506 > URL: http://jira.jboss.com/jira/browse/JBAS-1506 > Project: JBoss Application Server > Type: Patch > Components: IIOP service > Versions: JBossAS-4.0.1 Final, JBossAS-3.2.7 Final > Environment: This related to a jacorb bug, see: > http://www.jacorb.org/cgi-bin/bugzilla/show_bug.cgi?id=532 > Reporter: Dimitris Andreadis > Assignee: Dimitris Andreadis > Fix For: JBossAS-4.0.2 Final, JBossAS-5.0 Alpha > > > An exception is thrown when trying to insert a byte[] larger than 4000 bytes > into any any: > package test; > import java.util.Properties; > import org.omg.CORBA.ORB; > import org.omg.CORBA.Any; > import org.omg.CORBA.OctetSeqHelper; > public class Test > { > public static final void main(String[] args) > { > System.out.println("*** Starting test ***"); > > try > { > Properties props = new Properties(); > props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); > props.put("org.omg.CORBA.ORBSingletonClass", > "org.jacorb.orb.ORBSingleton"); > > ORB orb = ORB.init(args, props); > > byte[] bytes = new byte[4001]; > Any any = orb.create_any(); > OctetSeqHelper.insert(any, bytes); > } > catch (Exception e) > { > e.printStackTrace(); > } > } > } > =================================================== > [java] *** Starting test *** > [java] [ jacorb.home unset! Will use '.' ] > [java] [ File .\jacorb.properties for configuration jacorb not found ] > [java] java.lang.ArrayIndexOutOfBoundsException > [java] at java.lang.System.arraycopy(Native Method) > [java] at org.jacorb.orb.CDROutputStream.create_input_stream(Unknown > So > urce) > [java] at org.omg.CORBA.OctetSeqHelper.insert(OctetSeqHelper.java:41) > [java] at test.Test.main(Test.java:24) > ======================================================= > With a byte[] of size 4000 or less, it works! > I've noticed that the exception actually originates from the Helper class > that comes from Sun's JDK: > ... > public abstract class OctetSeqHelper > { > private static String _id = "IDL:omg.org/CORBA/OctetSeq:1.0"; > public static void insert (org.omg.CORBA.Any a, byte[] that) > { > org.omg.CORBA.portable.OutputStream out = a.create_output_stream (); > a.type (type ()); > write (out, that); > a.read_value (out.create_input_stream (), type ()); > } > The same class from the jacorb distribution does not perform that final > "a.read_value(...)" line that causes the exception: > public static void insert (org.omg.CORBA.Any any, byte[] s) > { > any.type (type ()); > write (any.create_output_stream (), s); > } > public static void write (final org.omg.CORBA.portable.OutputStream > _out, byte[] _s) > { > > _out.write_long(_s.length); > _out.write_octet_array(_s,0,_s.length); > } > Also, if you look into jacorb's CDROutputStream, there is somewhere a > hardcoded 4000 limit: > public final void write_octet_array( final byte[] value, > final int offset, > final int length) > { > if( value != null ) > { > if( length > 4000 ) > { > deferredArrayQueue.add( new DeferredWriteFrame( index, > offset, length, value )); > index += length; > deferred_writes += length; > } > else > { > check(length); > System.arraycopy(value,offset,buffer,pos,length); > index += length; > pos += length; > } > } > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa - If you want more information on JIRA, or have a bug to report see: http://www.atlassian.com/software/jira ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ JBoss-Development mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jboss-development
