Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 4914585
Votes 0
Synopsis RepositoryId Lists not handled correctly
Category idl:orb
Reported Against 1.4.2 , tiger-beta
Release Fixed 1.4.1(1.4.1_07), 1.4.2(1.4.2_04) (Bug ID:2074069) , tiger-beta2(Bug ID:2074070)
State 10-Fix Delivered, bug
Priority: 2-High
Related Bugs 4939854
Submit Date 28-AUG-2003
Description
The JDK ORB has a bug when dealing with repository id lists in valuetypes. When reading these we sometimes see  this exception:

Exception in thread "main" java.rmi.RemoteException: CORBA INTERNAL 
1398079695 N
o; nested exception is:
         org.omg.CORBA.INTERNAL:   vmcid: SUN  minor code: 207  completed: No
         at 
com.sun.corba.se.internal.iiop.ShutdownUtilDelegate.mapSystemExceptio
n(ShutdownUtilDelegate.java:134)
         at javax.rmi.CORBA.Util.mapSystemException(Util.java:65)
         at test._Simple_Stub.testEJBException(Unknown Source)
         at test.Client.example(Client.java:91)
         at test.Client.main(Client.java:50)
Caused by: org.omg.CORBA.INTERNAL:   vmcid: SUN  minor code: 207  completed: No
         at 
com.sun.corba.se.internal.orbutil.CacheTable.put(CacheTable.java:73)
         at 
com.sun.corba.se.internal.iiop.CDRInputStream_1_0.read_repositoryIds(
CDRInputStream_1_0.java:1762)
         at 
com.sun.corba.se.internal.iiop.CDRInputStream_1_0.read_value(CDRInput
Stream_1_0.java:1027)
         at 
com.sun.corba.se.internal.iiop.CDRInputStream.read_value(CDRInputStre
am.java:293)
         
Work Around
N/A
Evaluation
There is a problem in CDRInputStream_1_0.java:

              // read first array element and store it as an indirection to the whole array
            int indirection = get_offset() - 4;
            String repID = read_repositoryId();
            if (repositoryIdCache == null)
                repositoryIdCache = new CacheTable(false);
            repositoryIdCache.put(repID, indirection);

indirection is bbwi.index - 4, but after read_repositId(), if the read result is not null  --- stringIndirection will not be equal to indirection above: in readStringOrIndirection:

        int len = read_long();   <---- bbwi.index += 4

        //
        // Check for indirection
        //
        if (allowIndirection) {
            if (len == 0xffffffff)
                return null;
            else
                stringIndirection = get_offset() - 4; <---- is the original position, not original position - 4! 
        }

So, this will cause the put function is CacheTable triger that exception ---- same key for different vals. The fix might be like:
int indirection = get_offset();

  xxxxx@xxxxx   2003-09-26

A new bug (4939854) filed against tiger-beta for requesting the fix addressed in tiger.

  xxxxx@xxxxx   2003-10-17
Comments
  
  Include a link with my name & email   

Submitted On 28-NOV-2006
jdoe3000
This bug is NOT fixed in JDK 1.4.2_13.  Please reopen and fix this bug!!!



PLEASE NOTE: JDK6 is formerly known as Project Mustang