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