We're updating the issue view to help you get more done. 

Fix Source ClassLoader for DJVM

Description

exposed a small "thinko" in the DJVM's SourceClassLoader.

The DJVM project contains several "bootstrap" classes in the sandbox.* packages that exist solely to allow other sandbox.* classes to compile. These "bootstrap" classes were deliberately excluded from the DJVM's jar at the end of the build because they should have no bearing on any code at runtime.

However, the DJVM CLI was observed trying and failing to load these classes during the DJVM's "bytecode validation" phase.

therefore restored the "bootstrap" classes to the JAR, but the better fix is for SourceClassLoader not to try to load them in the first place.

The problem happens when ASM ClassRemapper tries to determine whether two sandboxed classes have a common super class. To do this correctly, ASM needs to consider the closed set of classes that exist completely outside the sandbox. These classes all belong to the application's classloader.

ASM must apply the "reverse sandbox mapping" to all sandbox.* classes except for the pinned classes, and then ask the SourceClassLoader to load those. The "bootstrap" classes can then safely be removed from the DJVM jar again.

Status

Assignee

Chris Rankin

Reporter

Chris Rankin

Priority

Medium

Labels

None

Severity

Medium

Fix versions

Ported to...

None

Feature Team

SGX