--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java Tue Oct 16 12:29:10 2012 -0700
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java Tue Oct 16 12:35:22 2012 -0700
@@ -1000,7 +1000,6 @@
/** Write a constant pool reference. */
public void putRef(Entry e) {
- assert(index != null);
addValue(encodeRefOrNull(e, index));
}
public void putRef(Entry e, Index index) {
@@ -1052,6 +1051,8 @@
int encodeRef(Entry e, Index ix) {
+ if (ix == null)
+ throw new RuntimeException("null index for " + e.stringValue());
int coding = ix.indexOf(e);
if (verbose > 2)
Utils.log.fine("putRef "+coding+" => "+e);
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java Tue Oct 16 12:29:10 2012 -0700
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java Tue Oct 16 12:35:22 2012 -0700
@@ -1381,6 +1381,8 @@
/** Index of all CP entries of a given tag and class. */
public Index getMemberIndex(byte tag, ClassEntry classRef) {
+ if (classRef == null)
+ throw new RuntimeException("missing class reference for " + tagName(tag));
if (indexByTagAndClass == null)
indexByTagAndClass = new Index[CONSTANT_Limit][];
Index allClasses = getIndexByTag(CONSTANT_Class);
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/bands.cpp Tue Oct 16 12:29:10 2012 -0700
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/bands.cpp Tue Oct 16 12:35:22 2012 -0700
@@ -187,6 +187,10 @@
entry* band::getRefCommon(cpindex* ix_, bool nullOKwithCaller) {
CHECK_0;
+ if (ix_ == NULL) {
+ abort("no index");
+ return NULL;
+ }
assert(ix_->ixTag == ixTag
|| ((ixTag == CONSTANT_All ||
ixTag == CONSTANT_LoadableValue ||
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/bands.h Tue Oct 16 12:29:10 2012 -0700
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/bands.h Tue Oct 16 12:35:22 2012 -0700
@@ -99,8 +99,8 @@
int getByte() { assert(ix == null); return vs[0].getByte(); }
int getInt() { assert(ix == null); return vs[0].getInt(); }
- entry* getRefN() { assert(ix != null); return getRefCommon(ix, true); }
- entry* getRef() { assert(ix != null); return getRefCommon(ix, false); }
+ entry* getRefN() { return getRefCommon(ix, true); }
+ entry* getRef() { return getRefCommon(ix, false); }
entry* getRefUsing(cpindex* ix2)
{ assert(ix == null); return getRefCommon(ix2, true); }
entry* getRefCommon(cpindex* ix, bool nullOK);
--- a/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp Tue Oct 16 12:29:10 2012 -0700
+++ b/jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp Tue Oct 16 12:35:22 2012 -0700
@@ -281,11 +281,13 @@
}
inline cpindex* cpool::getFieldIndex(entry* classRef) {
+ if (classRef == NULL) { abort("missing class reference"); return NULL; }
assert(classRef->tagMatches(CONSTANT_Class));
assert((uint)classRef->inord < (uint)tag_count[CONSTANT_Class]);
return &member_indexes[classRef->inord*2+0];
}
inline cpindex* cpool::getMethodIndex(entry* classRef) {
+ if (classRef == NULL) { abort("missing class reference"); return NULL; }
assert(classRef->tagMatches(CONSTANT_Class));
assert((uint)classRef->inord < (uint)tag_count[CONSTANT_Class]);
return &member_indexes[classRef->inord*2+1];
@@ -1289,6 +1291,7 @@
entry& e = cpMap[i];
e.refs = U_NEW(entry*, e.nrefs = 2);
e.refs[0] = cp_band1.getRef();
+ CHECK;
e.refs[1] = cp_band2.getRef();
CHECK;
}
@@ -1369,6 +1372,7 @@
entry& e = cpMap[i];
e.refs = U_NEW(entry*, e.nrefs = 1);
e.refs[0] = cp_MethodType.getRef();
+ CHECK;
}
}
@@ -2104,6 +2108,7 @@
int attrc = ADH_BYTE_CONTEXT(header);
int idx = ADH_BYTE_INDEX(header);
entry* name = attr_definition_name.getRef();
+ CHECK;
entry* layout = attr_definition_layout.getRef();
CHECK;
attr_defs[attrc].defineLayout(idx, name, layout->value.b.strval());
@@ -2208,7 +2213,9 @@
if (ics[i].name == NO_ENTRY_YET) {
// Long form.
ics[i].outer = ic_outer_class.getRefN();
+ CHECK;
ics[i].name = ic_name.getRefN();
+ CHECK;
} else {
// Fill in outer and name based on inner.
bytes& n = ics[i].inner->value.b;
@@ -2724,6 +2731,7 @@
e = b.getRefUsing(cp.getKQIndex());
else
e = b.getRefN();
+ CHECK;
switch (b.le_len) {
case 0: break;
case 1: putu1ref(e); break;
@@ -4006,6 +4014,7 @@
NOT_PRODUCT(bc_superfield.setIndex(null));
NOT_PRODUCT(bc_supermethod.setIndex(null));
}
+ CHECK;
for (int curIP = 0; ; curIP++) {
int curPC = (int)(wpoffset() - codeBase);
@@ -4119,7 +4128,8 @@
int coding = bc_initref.getInt();
// Find the nth overloading of <init> in classRef.
entry* ref = null;
- cpindex* ix = (classRef == null)? null: cp.getMethodIndex(classRef);
+ cpindex* ix = cp.getMethodIndex(classRef);
+ CHECK;
for (int j = 0, which_init = 0; ; j++) {
ref = (ix == null)? null: ix->get(j);
if (ref == null) break; // oops, bad input
@@ -4396,6 +4406,7 @@
case ADH_BYTE(ATTR_CONTEXT_CLASS, CLASS_ATTR_EnclosingMethod):
aname = cp.sym[cpool::s_EnclosingMethod];
putref(class_EnclosingMethod_RC.getRefN());
+ CHECK_0;
putref(class_EnclosingMethod_RDN.getRefN());
break;
@@ -4414,6 +4425,7 @@
putu2(count = method_Exceptions_N.getInt());
for (j = 0; j < count; j++) {
putref(method_Exceptions_RC.getRefN());
+ CHECK_0;
}
break;
@@ -4437,16 +4449,18 @@
// (253) [(1)(2)(2)]
// (254) [(1)(2)(2)(2)]
putu2(code_StackMapTable_offset.getInt());
+ CHECK_0;
for (int k = (tag - 251); k > 0; k--) {
put_stackmap_type();
+ CHECK_0;
}
} else {
// (255) [(1)NH[(2)]NH[(2)]]
putu2(code_StackMapTable_offset.getInt());
putu2(j2 = code_StackMapTable_local_N.getInt());
- while (j2-- > 0) put_stackmap_type();
+ while (j2-- > 0) {put_stackmap_type(); CHECK_0;}
putu2(j2 = code_StackMapTable_stack_N.getInt());
- while (j2-- > 0) put_stackmap_type();
+ while (j2-- > 0) {put_stackmap_type(); CHECK_0;}
}
}
break;
@@ -4470,7 +4484,9 @@
bii += code_LocalVariableTable_span_O.getInt();
putu2(to_bci(bii) - bci);
putref(code_LocalVariableTable_name_RU.getRefN());
+ CHECK_0;
putref(code_LocalVariableTable_type_RS.getRefN());
+ CHECK_0;
putu2(code_LocalVariableTable_slot.getInt());
}
break;
@@ -4485,7 +4501,9 @@
bii += code_LocalVariableTypeTable_span_O.getInt();
putu2(to_bci(bii) - bci);
putref(code_LocalVariableTypeTable_name_RU.getRefN());
+ CHECK_0;
putref(code_LocalVariableTypeTable_type_RS.getRefN());
+ CHECK_0;
putu2(code_LocalVariableTypeTable_slot.getInt());
}
break;
@@ -4513,7 +4531,7 @@
break;
}
}
-
+ CHECK_0;
if (aname == null) {
// Unparse a compressor-defined attribute.
layout_definition* lo = ad.getLayout(idx);
@@ -4669,7 +4687,9 @@
flags &= ~ACC_IC_LONG_FORM; // clear high bit if set to get clean zero
extra_ic.flags = flags;
extra_ic.outer = class_InnerClasses_outer_RCN.getRefN();
+ CHECK_0;
extra_ic.name = class_InnerClasses_name_RUN.getRefN();
+ CHECK_0;
// Detect if this is an exact copy of the global tuple.
if (global_ic != null) {
if (global_ic->flags != extra_ic.flags ||
@@ -4778,6 +4798,7 @@
julong indexMask = ad.flagIndexMask();
cur_class = class_this.getRef();
+ CHECK;
cur_super = class_super.getRef();
CHECK;
@@ -4791,6 +4812,7 @@
putu2(num = class_interface_count.getInt());
for (i = 0; i < num; i++) {
putref(class_interface.getRef());
+ CHECK;
}
write_members(class_field_count.getInt(), ATTR_CONTEXT_FIELD);