As reported in the integrity testing, the commit breaks quite a few of the org.apache.harmony.unpack200.tests.BcBandsTest in classlib.
http://people.apache.org/~chunrong/harmony-integrity/linux_x86/classlib-test/ error testSimple org.apache.harmony.unpack200.tests.BcBandsTest error testMultipleClassesSimple org.apache.harmony.unpack200.tests.BcBandsTest error testMultipleMethodsSimple org.apache.harmony.unpack200.tests.BcBandsTest error testBcCaseBands org.apache.harmony.unpack200.tests.BcBandsTest error testBcByteBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcShortBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcLocalBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcLabelBand org.apache.harmony.unpack200.tests.BcBandsTest error testWideForms org.apache.harmony.unpack200.tests.BcBandsTest error testBcIntRefBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcFloatRefBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcLongRefBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcDoubleRefBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcStringRefBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcClassRefBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcFieldRefBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcMethodRefBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcIMethodRefBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcThisFieldBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcSuperFieldBand org.apache.harmony.unpack200.tests.BcBandsTest error testBcThisMethodBand org.apache.harmony.unpack200.tests.BcBandsTest Test: testSimple Class: org.apache.harmony.unpack200.tests.BcBandsTest java.lang.NullPointerException at org.apache.harmony.unpack200.BcBands.unpack(BcBands.java:471) at org.apache.harmony.unpack200.BandSet.unpack(BandSet.java:53) at org.apache.harmony.unpack200.tests.BcBandsTest.testSimple(BcBandsTest.java:251) at java.lang.reflect.VMReflection.invokeMethod(VMReflection.java)....... On 9/1/08, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > > Author: sjanuary > Date: Mon Sep 1 05:08:09 2008 > New Revision: 690951 > > URL: http://svn.apache.org/viewvc?rev=690951&view=rev > Log: > Tentative fix for HARMONY-5960 ([pack200][classlib] IndexOutOfBounds > exception in BcBands.unpack()) > > Modified: > > harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/BcBands.java > > harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/ClassBands.java > > Modified: > harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/BcBands.java > URL: > http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/BcBands.java?rev=690951&r1=690950&r2=690951&view=diff > > ============================================================================== > --- > harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/BcBands.java > (original) > +++ > harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/BcBands.java > Mon Sep 1 05:08:09 2008 > @@ -20,6 +20,7 @@ > import java.io.IOException; > import java.io.InputStream; > import java.util.ArrayList; > +import java.util.Collections; > import java.util.List; > > import org.apache.harmony.pack200.Codec; > @@ -396,6 +397,7 @@ > int i = 0; > ArrayList orderedCodeAttributes = segment.getClassBands() > .getOrderedCodeAttributes(); > + int codeAttributeIndex = 0; > > // Exception table fields > int[] handlerCount = segment.getClassBands().getCodeHandlerCount(); > @@ -407,6 +409,9 @@ > int[][] handlerClassTypes = segment.getClassBands() > .getCodeHandlerClassRCN(); > > + boolean allCodeHasFlags = > segment.getSegmentHeader().getOptions().hasAllCodeFlags(); > + boolean[] codeHasFlags = > segment.getClassBands().getCodeHasAttributes(); > + > for (int c = 0; c < classCount; c++) { > int numberOfMethods = methodFlags[c].length; > for (int m = 0; m < numberOfMethods; m++) { > @@ -459,18 +464,26 @@ > } > methodAttributesList.add(indexForCodeAttr, codeAttr); > codeAttr.renumber(codeAttr.byteCodeOffsets); > - if(orderedCodeAttributes.size() > 0) { > - ArrayList currentAttributes = (ArrayList) > orderedCodeAttributes > - .get(i); > - for (int index = 0; index < > currentAttributes.size(); index++) { > - Attribute currentAttribute = (Attribute) > currentAttributes > - .get(index); > - codeAttr.addAttribute(currentAttribute); > - // Fix up the line numbers if needed > - if (currentAttribute.hasBCIRenumbering()) { > - ((BCIRenumberedAttribute) > currentAttribute) > > - .renumber(codeAttr.byteCodeOffsets); > - } > + List currentAttributes; > + if (allCodeHasFlags) { > + currentAttributes = (List) > orderedCodeAttributes.get(i); > + } else { > + if (codeHasFlags[i]) { > + currentAttributes = (List) > orderedCodeAttributes > + .get(codeAttributeIndex); > + codeAttributeIndex++; > + } else { > + currentAttributes = Collections.EMPTY_LIST; > + } > + } > + for (int index = 0; index < currentAttributes.size(); > index++) { > + Attribute currentAttribute = (Attribute) > currentAttributes > + .get(index); > + codeAttr.addAttribute(currentAttribute); > + // Fix up the line numbers if needed > + if (currentAttribute.hasBCIRenumbering()) { > + ((BCIRenumberedAttribute) currentAttribute) > + .renumber(codeAttr.byteCodeOffsets); > } > } > i++; > > Modified: > harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/ClassBands.java > URL: > http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/ClassBands.java?rev=690951&r1=690950&r2=690951&view=diff > > ============================================================================== > --- > harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/ClassBands.java > (original) > +++ > harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/unpack200/ClassBands.java > Mon Sep 1 05:08:09 2008 > @@ -68,7 +68,7 @@ > > private IcTuple[][] icLocal; > > - private ArrayList[] codeAttributes; > + private List[] codeAttributes; > > private int[] codeHandlerCount; > > @@ -114,6 +114,8 @@ > > private int[][] codeHandlerClassRCN; > > + private boolean [] codeHasAttributes; > + > /** > * @param segment > */ > @@ -718,10 +720,19 @@ > int codeCount = SegmentUtils.countMatches(methodFlags, layout); > int[] codeHeaders = decodeBandInt("code_headers", in, Codec.BYTE1, > codeCount); > + > + boolean allCodeHasFlags = > segment.getSegmentHeader().getOptions().hasAllCodeFlags(); > + if(!allCodeHasFlags) { > + codeHasAttributes = new boolean[codeCount]; > + } > int codeSpecialHeader = 0; > for (int i = 0; i < codeCount; i++) { > - if (codeHeaders[i] == 0) > + if (codeHeaders[i] == 0) { > codeSpecialHeader++; > + if(!allCodeHasFlags) { > + codeHasAttributes[i] = true; > + } > + } > } > int[] codeMaxStackSpecials = decodeBandInt("code_max_stack", in, > Codec.UNSIGNED5, codeSpecialHeader); > @@ -768,10 +779,9 @@ > codeHandlerClassRCN = decodeBandInt( > "code_handler_class_RCN", in, Codec.UNSIGNED5, > codeHandlerCount); > > - int codeFlagsCount = segment.getSegmentHeader().getOptions() > - .hasAllCodeFlags() ? codeCount : codeSpecialHeader; > + int codeFlagsCount = allCodeHasFlags ? codeCount : > codeSpecialHeader; > > - codeAttributes = new ArrayList[codeFlagsCount]; > + codeAttributes = new List[codeFlagsCount]; > for (int i = 0; i < codeAttributes.length; i++) { > codeAttributes[i] = new ArrayList(); > } > @@ -1389,4 +1399,8 @@ > return icLocal; > } > > + public boolean[] getCodeHasAttributes() { > + return codeHasAttributes; > + } > + > } > > >
