Report Number: CS-TN-98-62
Institution: Stanford University, Department of Computer Science
Title: A Type System for Object Initialization in the Java Bytecode
Language
Author: Freund, Stephen N.
Author: Mitchell, John C.
Date: April 1998
Abstract: In the standard Java implementation, a Java language program
is compiled to Java bytecode. This bytecode may be sent
across the network to another site, where it is then
interpreted by the Java Virtual Machine. Since bytecode may
be written by hand, or corrupted during network transmission,
the Java Virtual Machine contains a bytecode verifier that
performs a number of consistency checks before code is
interpreted. As illustrated by previous attacks on the Java
Virtual Machine, these tests, which include type correctness,
are critical for system security. In order to analyze
existing bytecode verifiers and to understand the properties
that should be verified, we develop a precise specification
of statically-correct Java bytecode, in the form of a type
system. Our focus in this paper is a subset of the bytecode
language dealing with object creation and initialization. For
this subset, we prove that for every Java bytecode program
that satisfies our typing constraints, every object is
initialized before it is used. The type system is easily
combined with a previous system developed by Stata and Abadi
for bytecode subroutines. Our analysis of subroutines and
object initialization reveals a previously unpublished bug in
the Sun JDK bytecode verifier.
http://i.stanford.edu/pub/cstr/reports/cs/tn/98/62/CS-TN-98-62.pdf