Skip to content

Instantly share code, notes, and snippets.

@baroquebobcat
Created September 13, 2011 04:27
Mirah ClassLoader fixen
import java.security.SecureClassLoader
import java.lang.ClassLoader
import java.util.Map
import java.nio.charset.Charset
class MirahClassLoader < SecureClassLoader
def initialize(parent:ClassLoader, class_map:Map)
super(parent)
@class_map = class_map
end
def findClass(name)
if @class_map[name]
bytes = String(@class_map[name]).getBytes "ISO-8859-1"
defineClass(name, bytes, 0, bytes.length)
else
raise ClassNotFoundException.new(name)
end
end
def loadClass(name, resolve)
cls = findLoadedClass(name)
if cls.nil?
if @class_map[name]
cls = findClass(name)
else
cls = super(name, false)
end
end
resolveClass(cls) if resolve
cls
end
end
class ClassLoader < java::security::SecureClassLoader
def initialize(parent, class_map)
super(parent)
@class_map = class_map
end
def findClass(name)
if @class_map[name]
bytes = @class_map[name].to_java_bytes
defineClass(name, bytes, 0, bytes.length)
else
raise java.lang.ClassNotFoundException.new(name)
end
end
def loadClass(name, resolve)
cls = findLoadedClass(name)
if cls.nil?
if @class_map[name]
cls = findClass(name)
else
cls = super(name, false)
end
end
resolveClass(cls) if resolve
cls
end
end
NativeException: java.lang.ClassFormatError: Incompatible magic value 4022320623 in class file Script1315875556881086000
java/lang/ClassLoader.java:-2:in `defineClass1'
java/lang/ClassLoader.java:631:in `defineClassCond'
java/lang/ClassLoader.java:615:in `defineClass'
java/lang/ClassLoader.java:465:in `defineClass'
org/mirah/class_loader.mirah:33:in `findClass'
org/mirah/class_loader.mirah:44:in `loadClass'
java/lang/ClassLoader.java:247:in `loadClass'
/.../mirah/test/jvm/bytecode_test_helper.rb:121:in `generate_classes'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment