Jason van Zyl | 96ac067 | 2001-10-29 19:59:54 +0000 | [diff] [blame] | 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 |
Enver Haase | df83ee9 | 2002-03-09 22:30:15 +0000 | [diff] [blame] | 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 |
Enver Haase | 86a23ee | 2002-11-19 12:24:11 +0000 | [diff] [blame] | 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. |
Jason van Zyl | 96ac067 | 2001-10-29 19:59:54 +0000 | [diff] [blame] | 18 | |
Enver Haase | fcbca34 | 2002-03-02 19:55:59 +0000 | [diff] [blame] | 19 | - There are a few bugs concerning access rights of referenced methods |
Jason van Zyl | 96ac067 | 2001-10-29 19:59:54 +0000 | [diff] [blame] | 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 | |
Enver Haase | 6923aa1 | 2003-01-28 18:03:18 +0000 | [diff] [blame] | 38 | - It is not verified that interfaces are actually tagged 'abstract'. |
| 39 | |
Jason van Zyl | 96ac067 | 2001-10-29 19:59:54 +0000 | [diff] [blame] | 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*** |