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();
###@###.### 2003-09-26
A new bug (4939854) filed against tiger-beta for requesting the fix addressed in tiger.
###@###.### 2003-10-17
|