I fixed an ikvmstub regression introduced in the previous snapshot and fixed AssemblyClassLoader.getPackage[s]. I did some class file fuzzing and fixed most differences between JDK 1.5 and IKVM (most are trivial and only fixed to reduce the noise in the fuzz differences, but I also found a couple of real bugs).
Other changes:
- Fixed runtime class loading to handle class loaders that return null or the wrong class.
- Fixed Constructor to prevent instantiating Enum objects.
- Fixed ikvmc not to stop with error when encountering invalid .class files. Also, when it encounters a .class file in a zip or jar that does not start with the Java class magic value it will include the .class file as a resource.
- Improved ikvmc warnings about invalid classes to include the filename.
- Fixed class file parser to correctly check the class file minor version.
- Fixed field and method name validation in class file parser.
- Fixed class file parser to check length of Deprecated attribute.
- Fixed class file parser to check length of InnerClasses attribute when class file version is >= 49.
- Fixed class file parser to always validate NameAndType constant pool entries.
- Fixed class file parser to check for maximum method size of 65535 instead of 65536.
- Fixed class file parser to check some properties of exception handler tables (instead of doing that at verification time).
- Fixed reflection (Class.getDeclaredMethods) to throw ClassFormatError or VerifyError.
- Fixed handling of inner class modifier flags to always use the flags from the inner classes attribute, except for the accessibility flags.
- Fixed verifier/compiler to emit methods that throw ClassFormatError, instead of only VerifyError.
- Fixed verifier to disallow exception handlers starting at bytecode offset zero.
- Fixed verifier to better check invokeinterface.
Source is in cvs. Binaries: ikvmbin-0.31.2424.zip