1 2 $Id$ 3 4 "TODO" list for JustIce, the Java Class File Verifier by Enver Haase. 5 6 - JustIce uses object generalization during pass 3b, as supposed by 7 Sun. However, there are better methods such as the idea proposed by 8 Staerk et al.: using sets of object types. JustIce may reject code 9 that is not rejected by traditional JVM-internal verifiers for this 10 reason. The corresponding checks all have some "TODO" tag with an 11 explanation; they're all in the 'InstConstraintVisitor.java' file. 12 Users encountering problems should simply comment them out (or 13 uncomment them) as they like. The default is some setting that works 14 well when using 15 $ java org.apache.bcel.verifier.TransitiveHull java.lang.String 16 meaning there are no rejects caused by the above problem in a lot of 17 usual classes. 18 19 - There are a few bugs concerning access rights of referenced methods 20 and probably fields. The tests for access rights that Sun defines 21 should happen in pass four (which JustIce performs during pass 3a) are 22 unintentionally omitted. This also happened to Sun and IBM with some 23 of their version 1.3 JVMs. Thanks Markus Dahm. 24 25 - There are bugs because of an ambiguity in the Java Virtual Machine 26 Specification, Second Edition. These have to do with inheritance: A 27 method invocation like MyObject::equals(Object) is considered illegal, 28 if MyObject has no overriding definition of equals(Object). Sun 29 clarified this issue via electronic mail: the invocation is legal, 30 because MyObject inherits the member function equals(Object) from 31 Object::equals(Object). The search algorithms don't seem to be trivial 32 because interfaces can not only specify methods, but also declare 33 fields. Also, access modifiers have to be honoured (see above). 34 35 - It is not verified if classes that propose they would implement an 36 interface _really_ implement all the methods. 37 38 - It is not verified that interfaces are actually tagged 'abstract'. 39 40 - The InstructionContext.getSuccessors() method may return the same 41 successor more than one time. For performance reasons the ControlFlow- 42 Graph.InstructionContextImpl class should return an array where the 43 successors are pairwise disjoint. It should also be cached so that we 44 don't have to do this calculation every time. 45 46 ***End of File*** 47